HDU 1002 A + B Problem II

       本人是大一新生啊,还是刚刚在杭电做题,1002题是一道大数的加法,还记得第一次做这道题的时候以为很简单的,以为就是两个整型的数相加,提交之后就是WA,很奇怪,百度之后才知道自己太天真啊。

      思路:大数的加法是算法中很经典的一部分,大数的加法首先把输入的数看成一个个的字符,然后把字符数组赋到整型数组,再把整型数组中的每一位从下标为零开始相加,记下进位,把所得的数再次赋到另一个数组中,然后在数组中从左往右找出不为零的数组下标并记录一下,最后把这个下标到下标为零输出即可。

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;
#define max 1010
int main()
{
    int n,i,j,k,case_n=1;
    int a[1010],b[1010];
    char str1[1010],str2[1010];

    cin>>n;
    while(n--)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        scanf("%s %s",str1,str2);
        for(i=strlen(str1)-1,j=0; i>=0; i--)
            a[j++]=str1[i]-'0';
        for(i=strlen(str2)-1,j=0; i>=0; i--)
            b[j++]=str2[i]-'0';
        for(i=0,k=0; i<=max-1; i++)
        {
            a[i]=a[i]+b[i]+k;
            k=a[i]/10;
            a[i]=a[i]%10;
        }
        for(i=max-1; i>=0; i--)
            if(a[i]!=0)
                break;
        cout<<"Case "<<case_n++<<":"<<endl;
        cout<<str1<<" + "<<str2<<" = ";
        for(j=i; j>=0; j--)
            cout<<a[j];
        if(n)
        {
            cout<<endl;
            cout<<endl;
        }
        else
            cout<<endl;
    }
    return 0;
}


你可能感兴趣的:(HDU 1002 A + B Problem II)