思路
简单的进制转换,但是因为数字比较大,所以要使用字符串进行存储,所以难点就在于如何对十进制字符串进行转换。
其中字符串除法是模拟竖式除法,从前往后除,我刚开始的时候开别人的题解就这一点没有明白,举个例子,987654 除以 321,计算步骤如下:
- 取被除数前三位(除数长度) - 987,除以321,结果是 3 余 24
- 余数 24 后面再加一位被除数 6 -> 246,但发现不够 321 除,结果添 0
- 246 再取一位被除数 -> 2465,除以321,结果7 余21
- 余数 21 再取一位被除数 -> 2184,除以321,结果是6
- 检查被除数已经取完,运行结束,得到结果 3076
#include <algorithm> #include <iostream> #include <string> using namespace std; //从 m 进制转换为 n 进制 string conversion(int m, string num, int n){ int l = num.length(), remain; string ans = ""; // 模拟竖式除法 for(int i = 0; i < l; ){ remain = 0; for(int j = i; j < l; j ++){ int temp = (remain * m + num[j] - '0') % n; num[j] = (remain * m + num[j] - '0') / n + '0'; remain = temp; } ans += char(remain + '0'); while(num[i] == '0') i ++; } reverse(ans.begin(), ans.end()); return ans; } int main(){ string num, ans; while(cin >> num){ ans = conversion(10, num, 2); cout << ans << endl; } return 0; }