zoukankan      html  css  js  c++  java
  • 数的进制转换⭐

    题面

    编写一个程序,可以实现将一个数字由一个进制转换为另一个进制。

    这里有62个不同数位{0-9,A-Z,a-z}。

    输入格式

    第一行输入一个整数,代表接下来的行数。

    接下来每一行都包含三个数字,首先是输入进制(十进制表示),然后是输出进制(十进制表示),最后是用输入进制表示的输入数字,数字之间用空格隔开。

    输入进制和输出进制都在2到62的范围之内。

    (在十进制下)A = 10,B = 11,…,Z = 35,a = 36,b = 37,…,z = 61 (0-9仍然表示0-9)。
    

    输出格式

    对于每一组进制转换,程序的输出都由三行构成。

    第一行包含两个数字,首先是输入进制(十进制表示),然后是用输入进制表示的输入数字。

    第二行包含两个数字,首先是输出进制(十进制表示),然后是用输出进制表示的输入数字。

    第三行为空白行。

    同一行内数字用空格隔开。

    输入样例:

    8
    62 2 abcdefghiz
    10 16 1234567890123456789012345678901234567890
    16 35 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
    35 23 333YMHOUE8JPLT7OX6K9FYCQ8A
    23 49 946B9AA02MI37E3D3MMJ4G7BL2F05
    49 61 1VbDkSIMJL3JjRgAdlUfcaWj
    61 5 dl9MDSWqwHjDnToKcsWE1S
    5 10 42104444441001414401221302402201233340311104212022133030
    

    输出样例:

    62 abcdefghiz
    2 11011100000100010111110010010110011111001001100011010010001
    
    10 1234567890123456789012345678901234567890
    16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
    
    16 3A0C92075C0DBF3B8ACBC5F96CE3F0AD2
    35 333YMHOUE8JPLT7OX6K9FYCQ8A
    
    35 333YMHOUE8JPLT7OX6K9FYCQ8A
    23 946B9AA02MI37E3D3MMJ4G7BL2F05
    
    23 946B9AA02MI37E3D3MMJ4G7BL2F05
    49 1VbDkSIMJL3JjRgAdlUfcaWj
    
    49 1VbDkSIMJL3JjRgAdlUfcaWj
    61 dl9MDSWqwHjDnToKcsWE1S
    
    61 dl9MDSWqwHjDnToKcsWE1S
    5 42104444441001414401221302402201233340311104212022133030
    
    5 42104444441001414401221302402201233340311104212022133030
    10 1234567890123456789012345678901234567890
    

    题解

    按照短除法,自己写写画画

    string

    #include <bits/stdc++.h>
    #define all(n) (n).begin(), (n).end()
    #define se second
    #define fi first
    #define pb push_back
    #define mp make_pair
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define per(i,a,b) for(int i=a;i>=b;--i)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> PII;
    typedef vector<int> VI;
    typedef double db;
    
    int _, n, m;
    string s;
    
    void work(int a, int b, string& s)
    {
        int len = int(s.size());
        VI cur(len), ans;
        rep(i, 0, len - 1)
            cur[i] = s[i] - (s[i] <= '9' ? 48 : s[i] <= 'Z' ? 64 - 9 : 96 - 35);
    
        for (int i = 0; i < len;)
        {
            rep (j, i + 1, len - 1)
                cur[j] += cur[j - 1] % b * a, cur[j - 1] /= b;
    
            ans.pb(cur[len - 1] % m); cur[len - 1] /= m;
    
            while (i < len && cur[i] == 0) ++i;
        }
    
        s = "";
        per (i, ans.size() - 1, 0)
            s += char(ans[i] + (ans[i] <= 9 ? 48 : ans[i] <= 35 ? 64 - 9 : 96 - 35));a
    }
    
    int main()
    {
        ios::sync_with_stdio(0); cin.tie(0);
        for (cin >> _; _; --_)a
        {
            cin >> n >> m >> s;
            cout << n << ' ' << s << '
    ';
            work(n, m, s);
            cout << m << ' ' << s << '
    ' << '
    ';
        }
        return 0;
    }
    

    char

    #include <bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define rep(i,a,b) for(int i=a;i>=b;--i)
    using namespace std;
    
    const int maxn = 1100;
    
    int t[maxn], A[maxn], n, m;
    char str1[maxn], str2[maxn];
    
    void solve()
    {
        int k=0, len = strlen(str1);
        per(i,len,0)
            t[len-i-1] = str1[i] -(str1[i] < 58 ? 48 : str1[i] < 97 ? 55 : 61);
        while(len)
        {
            per(i,len-1,1)
            {
                t[i-1] += t[i] % m * n;
                t[i] /= m;
            }
            A[k++] = t[0] % m;
            t[0] /= m;
            while(len>0&&!t[len-1]) --len;
        }
        str2[k] =NULL;
        FOR(i,0,k-1)
            str2[k-1-i] = A[i] + (A[i] < 10 ? 48 : A[i] < 36 ? 55 : 61);
    }
    
    int main()
    {
        int t;
        scanf("%d
    ",&t);
        while(t--) 
        {
            scanf("%d %d %s
    ", &n, &m, str1);
            solve();
            printf("%d %s
    %d %s
    
    ", n, str1, m, str2);
        }
        return 0;
    }
    
  • 相关阅读:
    POJ 1987 Distance Statistics
    mongo 查询
    图解SSH原理_20190613
    Mongo 备份
    地理空间数据
    fiddler 4 抓取 https 设置
    2、动态元素的定位
    1、selenium 8大元素定位方式
    1、Fiddler 打断点 bpu
    2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null
  • 原文地址:https://www.cnblogs.com/2aptx4869/p/12851109.html
Copyright © 2011-2022 走看看