杭电acm 1002 A + B Problem II

显然的大数相加问题,可以想着转换为字符串来操作,选择字符数组而不是int或其他型的数组(整型数组无法对连续输入的数字进行划分,只能是每出现一个空格或换行符才能保存到一位)。把每位数字看作一个字符再进行操作。。。

具体程序已加上了注释……

#include<iostream>
//#include<fstream>
#include<string>
using namespace std;
int main()
{
 //ifstream cin("1001.txt");
 int n,num=1;
 int i,j,k;
 cin>>n;
 while(n--)
 {
  string a,b;
  char sum[1001];
  cin>>a>>b;
  int t,tt=0,t1;//tt保存进位为0或1;t1为两个对应数位上的数之和再和进位相加的结果(可能大于10)
  for(k=0,j=b.size()-1,i=a.size()-1;i>=0&&j>=0;k++,j--,i--)//这里的是i>=0&&j>=0,不能用i>=0,j>=0
  {
   t1=a[i]-'0'+b[j]-'0'+tt;
   tt=t1/10;
   sum[k]=t1%10+'0';
  }
  if(i>=0&&j<0)//a的长度大于b
  {
   for(t=i;t>=0;t--,k++)
   {
    t1=a[t]-'0'+tt;
    tt=t1/10;
    sum[k]=t1%10+'0';
   }
  }
  if(i<0&&j>=0)//a的长度小于b
  {
   for(t=j;t>=0;t--,k++)
   {
    t1=b[t]-'0'+tt;
    tt=t1/10;
    sum[k]=t1%10+'0';
   }
  }
  if(tt)
   sum[k++]='1';
  cout<<"Case "<<num<<':'<<endl;
  num++;
  cout<<a<<' '<<'+'<<' '<<b<<' '<<'='<<' ';
  for(j=k-1;j>=0;j--)
   cout<<sum[j];
  cout<<endl;
  if(n!=0)
   cout<<endl;
 }
 return 0;
}

posted @ 2012-10-20 17:03  MegamindLS  阅读(234)  评论(0编辑  收藏  举报