1022. D进制的A+B


cpp
#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;