cxxiaoguo


私信TA

用户名:guowenwu

访问量:32809

签 名:

累死自己卷死你们

等  级
排  名 131
经  验 7634
参赛次数 8
文章发表 62
年  龄 0
在职情况 学生
学  校 成都信息工程大学
专  业 人工智能

  自我简介:

TA的其他文章

解题思路:


话不多说看注释


注意事项:


有不懂的可评论问题


参考代码:

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

  评论区

  • «
  • »