10:大整数加法

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

求两个不超过200位非负整数的和。

输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555



这道题目看似简单,实际上比较复杂,这个时候,我们可以用高精度来解决这道题。
废话不多说了,来看代码:
#include<bits/stdc++.h>
using namespace std;
void Add(char s1[],char s2[])   
{
    int num1[1005]={0},num2[1005]={0},sum[1008]={0};    
    int i,j=0,k=0,len1,len2;    
    len1=strlen(s1);    
    len2=strlen(s2);    
        
    for(i=len1-1;i>=0;i--)    
       num1[j++]=s1[i]-'0';    
    for(i=len2-1;i>=0;i--)    
       num2[k++]=s2[i]-'0';    
    for(i=0;i<=1005;i++)    
    {    
       sum[i]=num1[i]+num2[i]+sum[i];    
       if(sum[i]>=10)    
       {    
        sum[i+1]++;    
        sum[i]=sum[i]%10;    
       }  
    }    
    for(i=1004;;i--)    
    {    
        if(sum[i]!=0)    
        {    
            k=i;    
            break;    
        }    
    }    
    for(i=k;i>=0;i--)    
     cout<<sum[i];  
    cout<<endl;         
 }     
 int main()    
 {    
    char a[1005],b[1005];    
    scanf("%s %s",a,b);  
    if(a[0]=='0'&&b[0]=='0')
       cout<<0<<endl;  
    else  
        Add(a,b);    
    return 0;    
 }
这里要注意的是,再去除前导0的时候,不要把问题变得复杂。