解题思路:
话不多说看注释
注意事项:
有不懂的可评论问题
参考代码:
#include<stdio.h>
#include<string.h>
main(){
char a[1000],b[1000],c[1002];
while(scanf("%s%s",a,b)!=EOF){
int k=0,t=0,i,j,q=0; //t为进位制,需要进位时t=1,否则t=0
if(strlen(a)<=strlen(b))\\选出较小的数的位数赋值给q
q=strlen(a);
else
q=strlen(b);
for(i=strlen(a)-1,j=strlen(b)-1;q-1>=0;i--,j--,q--){\\倒序相加直到较小的数加完
if(((a[i]%48+b[j]%48)+t)>=10)//表示要进位
{
c[k++]=((a[i]%48+b[j]%48)+t)%10+48;//0的阿斯克码制为48
t=1;
}
else{//不进位
c[k++]=(a[i]%48+b[j]%48)+48+t;
t=0;
}
}//到此较小的那个数已经加完
if(j==i&&t==1)c[k++]='1';//当两个数位数相同最后又要进位的情况
else{//两个位数不同
if(i>=0){//a位数更多时
if(t==1)//在位数较少的数加完后还需要进位的情况
for(j=i;j>=0;j--){
if(a[j]%48+t>=10){//判断a剩下的位数加进位是否还需要进位。例99999和1相加的情况
c[k++]=(a[j]%48+t)%10+48;//还需要进位
t=1;
}
else{//不需要进位
c[k++]=a[j]%48+t+48;
t=0;
}
}
else
{//在位数较少的数加完后不需要进位的情况
for(j=q;j>=0;j--){
c[k++]=a[j]%48+48;
}
}
if(t==1)c[k++]='1';//最后a还有进位的情况
}
else{//b的位数更多时
q=j;
if(t==1)
for(j=q;j>=0;j--){
if(b[j]%48+t>=10){
c[k++]=(b[j]%48+t)%10+48;
t=1;
}
else{
c[k++]=b[j]%48+t+48;
t=0;
}
}
else{
for(j=q;j>=0;j--){
c[k++]=b[j]%48+48;
}
}
if(t==1)c[k++]='1';
}}
for(i=k-1;i>=0;i--){//倒序输出
printf("%c",c[i]);
}
printf("\n");
}}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复