hdu-1002 A + B Problem II_(高精度加法)

来源:互联网 发布:插座开关推荐 知乎 编辑:程序博客网 时间:2024/05/29 17:16

大整数相加,用数组模拟加法

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int num1[1001],num2[1001];char s1[1001],s2[1001],s[1001];int main(){    int T,t,k1,k2,i,j,flag;    cin>>T;    for(t=1;t<=T;t++)    {        memset(num1,0,sizeof(num1));        memset(num2,0,sizeof(num2));//初始化时重置num为0        cin>>s1>>s2;        k1=strlen(s1);        k2=strlen(s2);        for(i=0;i<k1;i++)num1[k1-i-1]=s1[i]-'0';        for(i=0;i<k2;i++)num2[k2-i-1]=s2[i]-'0';//将两个数的每一位反序保存在数组内        j=max(k1-1,k2-1);        for(flag=0,i=0;i<=j;i++)//flag负责保存上一次是否进位        {            num1[i]+=num2[i]+flag;//计算结果保存在num1中            if(num1[i]>=10){num1[i]%=10;flag=1;}//若大于10,就要模10进1            else flag=0;        }        if(flag){num1[j++]=1;}//若最后一个进位,保存长度的j自增;最后一位要进位        memset(s,0,sizeof(s));        for(i=0;i<=j;i++)s[j-i]=num1[i]+'0';//把结果反序保存于字符串内        printf("Case %d:\n",t);        printf("%s + %s = %s\n",s1,s2,s);        if(t!=T)printf("\n");    }}