1022 D进制的A+B
分数 20
作者 CHEN, Yue
单位 浙江大学
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
题目分析
1、输入
输入在一行中依次给出 3 个整数 A、B 和 D。
int numa,numb,numd;
scanf("%d %d %d",&numa,&numb,&numd);
2、输出
输出 A+B 的 D 进制数。
A 和 B是两个非负 10 进制整数。
第一步:A和B是两个非负 10 进制整数,可以直接计算它们的和;
int numy;
numy=numa+numb;
第二步:10进制转换D进制;用“除基取余法”。
举个例子:
注意:这里用的是do…while而不是while,是因为如果十进制数numy恰好等于0,那么用while语句将使循环直接跳出,导致结果出错。
如果用while,记得加一个判断语句,当numy==0时输出0。
int z[45],count=0;//数组存放D进制的每一位,count为位数
numy=numa+numb;
do{
z[count++]=numy%numd;//除基取余
numy=numy/numd;
}while(numy!=0);//当商不为0时进行循环
第三步,转化好的数,目前在数组z[]里面,用for循环,倒叙输出。
for (int i=count;i!=0;i--){
printf("%d",z[i-1]);
}
3、碎碎念
代码如下
1、自己的代码
#include<stdio.h>
int main(){
int numa,numb,numd;
scanf("%d %d %d",&numa,&numb,&numd);
int numy,z[45],count=0;//数组存放D进制的每一位
numy=numa+numb;
do{
z[count++]=numy%numd;//取余
numy=numy/numd;
}while(numy!=0);
for (int i=count;i!=0;i--){
printf("%d",z[i-1]);
}
return 0;
}
2、算法笔记代码
#include<stdio.h>
int main(){
int a,b,d;
scanf("%d %d %d",&a,&b,&d);
int sum=a+b;
int ans[45],num=0;//ans存放D进制的每一位
do{//进制转换
ans[num++]=sum%d;
sum/=d;
}while(sum!=0);
for (int i=num-1;i>=0;i--){//从高位到低位进行输出
printf("%d",ans[i]);
}
return 0;
}