因为找不到其他进制转换与大数结合的题目,所以就用这题凑合一下练手了。。思路还是基本的暴力取余法,不过并非先将整个数转成十进制而是直接直接求商取余(不过对于数的每位还是要转一下的)。
可能得稍微处理一下的地方:
- 对首位商是0时的判断处理;
- 对商串的反转。
潜在优化:
- 基本的大数运算等的优化策略吧。。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int n, m;
string number;
string ans = "";
int to_num(char str) {
if (str >= '0'&&str <= '9') return str - '0';
else return str - 'A' + 10;
}
char to_char(int num) {
if (num < 10) return num + '0';
else return num - 10 + 'A';
}
void transform() {
string temp_num = number;
while (!temp_num.empty()) {
string t = "";
int shang = 0, yushu = 0;
for (int i = 0; i < temp_num.length(); ++i) {
int temp = to_num(temp_num[i]);
temp += yushu * n;
shang = temp / m;
yushu = temp % m;
if (!shang && !t.length()) continue;
t += to_char(shang);
}
ans+=to_char(yushu);
temp_num=t;
}
ans.assign(ans.rbegin(), ans.rend());
cout << ans << endl;
}
int main(){
cin >> n >> number >> m;
transform();
return 0;
}