c++编程:D进制的A+B(1022-PAT乙级)

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;             
相关推荐
fpcc25 分钟前
算法和数据结构—动态规划法
数据结构·算法·动态规划
乐观勇敢坚强的老彭2 小时前
C++信奥GESP四级的常见题型和解题模板速查表
开发语言·c++
欧特克_Glodon2 小时前
OpenCV计算机视觉开发入门与实践<二十二>:图像平滑之线性滤波
c++·人工智能·opencv·计算机视觉
沙盘客2 小时前
AFSIM 示例解读(09)· 传感器全家桶 sensor_demos(下):ESM / SAR / 被动测向
c++·经验分享·后端
大鹏的NLP博客2 小时前
WSL2 资源治理:从 ONNX Runtime CUDA 编译 OOM 到 `.wslconfig` 防御配置
c++·深度学习·onnx runtime
星星.7223 小时前
C++算法竞赛|二分查找与二分答案:边界模板、浮点二分、STL
数据结构·c++·算法
sel_93 小时前
【OPD论文导读(二)】OPD(On-Policy Distillation)全景调研:十篇论文讲透“在自己生成的内容上学习“这件事
人工智能·python·深度学习·学习·算法·语言模型
动词ing3 小时前
【学习笔记】数据结构(数组长度和关键特性+快慢指针+左右指针)
数据结构·笔记·学习
老当益壮梁奶奶3 小时前
Linux 软件编程学习笔记(六):线程编程入门与实践
linux·c语言·c++·笔记·学习
小小龙学IT3 小时前
Dear ImGui 开源即时模式 GUI 库深度解析
c++·ui·开源