zoj 2001//先倒,再相加,再倒;大…

本文介绍了一种使用C++实现的字符串加法算法,通过逐位相加并处理进位的方式,实现两个大数字符串的加法运算。适用于处理超过常规整型变量范围的大数计算问题。
 #include<stdio.h>
 #include<string.h>
 #include<iostream>
 using namespace std;
 #define N 10001
 char str[N],sbr[N];
 int a[N],b[N];
 int main()
 {
     int i,j,len,len1,len2;
     int t;
     cin>>t;
     while(t--)
     {
         memset(a,0,sizeof(a));
         memset(b,0,sizeof(b));
         cin>>str>>sbr;
         len1=strlen(str);
         len2=strlen(sbr);
         len=len1>len2?len1:len2;
         
         for(i=0;i<len1;i++)
         a[i]=str[i]-'0';
         for(i=0;i<len2;i++)
         b[i]=sbr[i]-'0';
         
         for(i=0;i<len;i++)
         {
             a[i]+=b[i];
             if(a[i]>9)
             {
                 a[i]-=10;
                 a[i+1]++;
             }
         }
         
         i=0;
         int flag=0;
         while(!a[i])
         {
             i++;
             if(i==len+1)
             
                 cout<<"0\n"; //保证有零的输出
                 flag=1;break;
             }
         }
         if(flag) continue;
         len=a[len]?len:len-1; // 这里是判断最后一位的进位
         for(j=i;j<=len;j++)
         cout<<a[j];
         cout<<endl;
     }
     return 0;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值