思路

比如 173,二进制形式是 10101101,我们在求二进制形式的时候求出来的结果其实就是倒着的,那么我们刚好就可以直接算出来逆序的二进制形式对应的值。

但是因为 A 可能是一个非常大的数,所以直接算不合适,所以我们需要记住一个进制转换的模板!很重要,划重点。这其实是一个模拟竖式除法的过程(数字 num 转换成 n 进制就是一个除以 n 的过程)

#include<iostream>
#include<algorithm>

using namespace std;

// 由m进制转换成n进制
string conversion(string num, int m, int n){
    int l = num.size(), k = 0;
    string ans = "";
    for(int i = 0; i < l; ){
        k = 0;
        // k是 a/b 的余数,因为在 a/b 的过程中我们要不断更新商的值,所以要不断更新 num[j]
        // 单纯求余数的话我们 k * m + num[j] 计算若干次就够了
        for(int j = i; j < l; j ++){
            int t = (k * m + num[j] - '0') % n;
            num[j] = (k * m + num[j] - '0') / n + '0';
            k = t;
        }
        ans += (k + '0');
        // 如果 num[i] == 0 说明商在该位上没有值,比如 0001,那值就是 1,跳过去就好了
        while(num[i] == '0') i ++;
    }
    return ans;
}

int main(){
    string num;
    while (cin >> num){
        string temp = conversion(num, 10, 2);
        temp = conversion(temp, 2, 10);
        reverse(temp.begin(), temp.end());
        cout << temp << endl;
    }
}