HDU1002 Sum Problem

大数加法。

#include <cstdio>
#include <cstring>
using namespace std;
const int MAX=1001;
void big_add(char a[],char b[],char c[])
{
    int i,e=0,d;
    int len1=strlen(a);
    int len2=strlen(b);
    for(i=0;i<len1/2;i++)
    {
        char t=a[i];a[i]=a[len1-1-i];a[len1-1-i]=t;
    }                //本题可以把这个字符串倒叙做成一个函数,减少代码量,后面用的比较多,我比较懒,,直接复制粘贴了,,,
    for(i=0;i<len2/2;i++)
    {
        char t=b[i];b[i]=b[len2-1-i];b[len2-1-i]=t;
    }
    for(i=0;i<len1&&i<len2;i++)
    {
        d=a[i]-'0'+b[i]-'0'+e;
        c[i]=d%10+'0';
        e=d/10;
    }
    if(i<len1)
      for(;i<len1;i++)
      {
          d=a[i]-'0'+e;
          c[i]=d%10+'0';
          e=d/10;
      }
    else
      for(;i<len2;i++)
      {
          d=b[i]-'0'+e;
          c[i]=d%10+'0';
          e=d/10;
      }
    if(e) c[i++]=e+'0';
    c[i]=0;
    int len3=i;
    for(i=0;i<len3/2;i++)
    {
        char t=c[i];c[i]=c[len3-1-i];c[len3-1-i]=t;
    }
     for(i=0;i<len1/2;i++)
    {
        char t=a[i];a[i]=a[len1-1-i];a[len1-1-i]=t;
    }
    for(i=0;i<len2/2;i++)
    {
        char t=b[i];b[i]=b[len2-1-i];b[len2-1-i]=t;
    }
}
int main()
{
    char a[MAX],b[MAX],c[MAX];
    int t,T=0;
    while(scanf("%d",&t)!=-1)
      while(t--)
      {
          T++;
          scanf("%s%s",a,b);
          big_add(a,b,c);
          printf("Case %d:\n%s + %s = %s\n",T,a,b,c);
          if(t>0) printf("\n");   //本题的“Output a blank line between two test cases.”不包括最后一组数据后面的空格.这地方PE了好多次...
      }
    return 0;
}

你可能感兴趣的:(HDU1002 Sum Problem)