top1编程
← 返回题目
题解

【提高】AtoB

1 条题解

  • 0
    @ 2026-7-29 0:17:40
    #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