一【题目难度】
- 乙级
二【题目编号】
- 1022 D进制的A+B (20 分)
三【题目描述】
- 输入两个非负 10 进制整数 A A A 和 B ( ≤ 2 30 − 1 ) B (≤2^{30} −1) B(≤230−1),输出 A + B A+B A+B 的 D ( 1 < D ≤ 10 ) D (1<D≤10) D(1<D≤10)进制数。
四【题目示例】
-
输入格式:
输入在一行中依次给出 3 个整数 A A A、 B B B 和 D D D。 -
输出格式:
输出 A + B A+B A+B 的 D D D 进制数。 -
输入样例:
123 456 8 -
输出样例:
1103
五【解题思路】
- 这个题本质上是考察将十进制转换为其他进制,我们使用除基取余法,首先我们要新建一个数组用来存储每个位置,因为 A + B A+B A+B最终可能有31位,所以数组长度为31,接下来就进行进制转换,每次对 s u m ( A + B ) sum(A+B) sum(A+B)取余,得到第一位,再对 s u m sum sum除以要转的进制,循环往复至 s u m sum sum为0即停,最后从数组的后面向前输出即可,注意如果 A + B = 0 A+B=0 A+B=0,特判输出0,因为没进入 w h i l e while while循环,当然,也可以使用 d o … w h i l e do…while do…while解决
六【最终得分】
- 20分
七【代码实现】
#include<stdio.h>
int main()
{
int A,B,D;
scanf("%d %d %d",&A,&B,&D);
int sum = A + B;
int res[31],index = 0;
if(sum == 0)
{
printf("%d",0);
}
while(sum != 0)
{
res[index++] = sum % D;
sum /= D;
}
for(int i = index - 1;i >= 0;i--)
{
printf("%d",res[i]);
}
return 0;
}