zoukankan      html  css  js  c++  java
  • AcWing 124 数的进制转换 (高精度)

    题目链接

    解题思路

      进制转换的题很简单,这里主要是取余的操作值得一提。原来的数字表示的是(a_0 imes k^{n-1} + a_1 imes k^{n-1} + ... + a_n imes k^0),这里在除x取余转成x进制的时候没必要先转成十进制,直接通过处理每一位表示的数来求余数即可。

    代码

    int a,b;
    string s,ans;
    vector<int> tmp;
    inline int f(char ch) {
        if (ch<='9') return ch-'0';
        if (ch<='Z') return ch-'A'+10;
        return ch-'a'+36;
    }
    inline char ff(int num) {
        if (num<=9) return num+'0';
        if (num<=35) return num-10+'A';
        return num-36+'a'; 
    } 
    void solve() {
        reverse(s.begin(),s.end());
        for (auto c : s) tmp.push_back(f(c));
        while(!tmp.empty()) {
            int r = 0, sz = tmp.size();
            for (int i = sz-1; i>=0; --i) {
            //从高位开始模拟除法和取余操作,r即余数
                tmp[i] += r*a;
                r = tmp[i]%b;
                tmp[i] /= b;
            }
            ans.push_back(ff(r));
            //排除先导0
            while(!tmp.empty() && !tmp.back()) tmp.pop_back();
        }
        reverse(ans.begin(),ans.end());
    }
    int main() {
        int t; cin >> t;
        while(t--) {
            cin >> a >> b >> s;
            cout << a << ' ' << s << endl;
            solve();
            cout << b << ' ' << ans << endl << endl;
            tmp.clear(); ans.clear();
        }
        return 0;
    }
    
  • 相关阅读:
    Notes of Daily Scrum Meeting(12.22)
    一个合格的程序员应该读过哪些书
    snprintf vs sprintf
    Centos 关闭图形界面
    oracle selinux 问题
    struct 和typedef struct的区别
    c语言字符串函数
    504. Base 7
    汉诺塔python实现
    VIM字符编码基础知识
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/13323499.html
Copyright © 2011-2022 走看看