PAT乙级(1022 D进制的A+B)C语言

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值