1022. D进制的A+B
![]()
![]()
#include<bits/stdc++.h> using namespace std; int main() { int A, B, D; // 定义三个整数变量 A、B 和进制 D cin >> A >> B >> D; // 从标准输入读取 A、B、D 的值 int sum = A + B; // 计算 A 和 B 的和,存入 sum // 处理 sum = 0 的特殊情况 if(sum == 0) { // 如果和为 0 cout << 0 << endl; // 直接输出 0(0 的任何进制表示都是 0) return 0; // 程序结束 } stack<int> s; // 创建一个整型栈 s,用于存储进制转换后的每一位 // 除 D 取余法:将 sum 转换为 D 进制 while(sum) { // 当 sum 不为 0 时循环 s.push(sum % D); // 计算 sum 除以 D 的余数,压入栈中 sum /= D; // sum 整除 D,准备处理下一位 } // 循环结束后,栈中从栈底到栈顶存储的是 D 进制数的低位到高位(逆序) // 出栈输出:从高位到低位依次输出 while(!s.empty()) { // 当栈不为空时循环 int digit = s.top(); // 获取栈顶元素(当前最高位) s.pop(); // 弹出栈顶元素 // 判断是否需要输出字母(针对十六进制等大于 10 的进制) if(digit < 10) { // 如果数字小于 10 cout << digit; // 直接输出数字(0-9) } else { // 如果数字大于等于 10(即 10-15) // 转换为对应字母:10→A, 11→B, 12→C, 13→D, 14→E, 15→F cout << char(digit - 10 + 'A'); } } return 0;