大数A+B

很激动的奔来写这篇日志(虽然已经深更半夜) 想了有些时间 终于想出来这个大数加法的源码了 时间耦合度O(N)

跟其他代码一样 用的处理字符串的方法 不过不一样的是接受两数和的字符串我从尾部输入数据 避免了出现多出一位从头再处理一遍的状况 同时也是给两个字符串各一个下标变量 向前推进 自我感觉是比较高效率的代码(虽然因为半夜交的 运行时间不精确被加加嘲讽了一番→_→) 还是蛮兴奋的~~(另想吐槽分神的数据……说好的整数怎么能带前导0呢T^T害我WA了两次 差点有改代码的冲动……)

代码奉上:

#include 
   
   
    
    
#include 
    
    
     
     

int main()
{
    char a[1502],b[1502],k[1503];
    int i,j;
    int lena,lenb,x;
    while(~scanf("%s%s",a,b))
    {
        lena=strlen(a);
        lenb=strlen(b);
        k[1502]=0;
        for(i=lena-1,j=lenb-1;i+1&&j+1;i--,j--)
        {
            k[1502-(lena-i)]=a[i]+b[j]-'0';
            if(k[1502-lena+i+1]>'9')
            {
                k[1502-lena+i+1]='0'+k[1502-lena+i+1]-'9'-1;
                k[1502-lena+i]++;
            }
        }
        x=lena;
        if(i>=0)
        {
            for(;i+1;i--)
            {

                k[1502-lena+i]=a[i];
                if(k[1502-lena+i+1]>'9')
                {
                    k[1502-lena+i+1]='0'+k[1502-lena+i+1]-'9'-1;
                    k[1502-lena+i]++;
                }
            }
            x=lena;
        }else if(j>=0)
        {
            for(;j+1;j--)
            {

                k[1502-lenb+j]=b[j];
                if(k[1502-lenb+j+1]>'9')
                {
                    k[1502-lenb+j+1]='0'+k[1502-lenb+j+1]-'9'-1;
                    k[1502-lenb+j]++;
                }
            }
            x=lenb;
        }
        /*if(k[1502-x]>'9')
        {
            k[1502-x]='0'+k[1502-x]-'9'-1;
            x++;
            k[1502-x]='1';
        }可忽略 处理前导的代码*/
       while(k[1502-x]=='0') x--;
       printf("%s\n",k+1502-x);
    }

    return 0;
}

    
    
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值