思路
比如 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; } }