题解
【提高】AtoB
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int main() { // s:读入的原进制数,用字符串存,方便处理字母 string s; cin >> s; // sum:先把原进制数转成十进制后的结果 // n:原进制,m:目标进制 long long sum = 0, n, m; cin >> n >> m; // a:当前位的权值,初始为 n^0 = 1 long long a = 1; // 从最低位开始往高位处理 for (int i = s.size() - 1; i >= 0; i--) { int c; // 把字符转成数字: // '0'~'9' -> 0~9 // 'a'~'z' -> 10~35 if (s[i] <= '9') { c = s[i] - '0'; } else { c = s[i] - 'a' + 10; } // 累加当前位的值 sum += c * a; // 下一位权值乘以原进制 a *= n; } // s 复用来存转换后的结果 s = ""; // 特判 0,不然后面 while(sum) 不会进循环 if (sum == 0) { s = "0"; } // 把十进制 sum 转成 m 进制 while (sum) { char c; // 取当前最低位 if (sum % m <= 9) { c = sum % m + '0'; } else { c = sum % m + 'a' - 10; } // 去掉最低位 sum /= m; // 低位先取到,所以要插到前面 s = c + s; } // 按题目要求输出成 (answer)b 的形式 cout << "(" << s << ")" << m; return 0; }
- 1