解题思路:


话不多说看注释


注意事项:


有不懂的可评论问题


参考代码:

#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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论