PAT乙级(1022 D进制的A+B)C语言
文章目录
- 1022 D进制的A+B
- 输入格式
- 输出格式
- 输入样例
- 输出样例
- 代码示例
1022 D进制的A+B
输入格式
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式
输出 A+B 的 D 进制数。
输入样例
123 456 8
输出样例
1103
代码示例
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
// 主函数,程序的入口点
int main() {
// 定义三个整型变量 a、b 和 d
// a 和 b 用于存储输入的两个十进制非负整数
// d 用于存储目标进制
int a, b, d;
// 从标准输入读取三个整数,分别赋值给 a、b 和 d
scanf("%d %d %d", &a, &b, &d);
// 计算 a 和 b 的和,存储在变量 sum 中
int sum = a + b;
// 定义一个长度为 32 的整型数组 c
// 该数组用于存储转换后的 D 进制数的每一位
// 考虑到输入的数最大为 2^30 - 1,32 位足够存储转换后的结果
int c[32];
// 定义一个整型变量 index,用于记录数组 c 的当前索引位置,初始值为 0
int index = 0;
// 判断 sum 是否为 0
if (sum == 0) {
// 如果 sum 为 0,直接输出 0
printf("0");
} else {
// 当 sum 大于 0 时,进行进制转换
while (sum > 0) {
// 将 sum 对 d 取模的结果存储到数组 c 中
// 该结果是 D 进制数的当前最低位
c[index++] = sum % d;
// sum 除以 d 并取整,更新 sum 的值
// 相当于去掉当前最低位,继续处理剩余的数
sum /= d;
}
}
// 逆序输出数组 c 中的元素
// 因为在前面的进制转换过程中,最低位先存储在数组中,所以需要逆序输出
for (int i = index - 1; i >= 0; i--) {
// 输出数组 c 中第 i 个元素
printf("%d", c[i]);
}
// 程序正常结束,返回 0
return 0;
}