题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002
题目要求:输入t 为测试组数,然后输入两个正数 a,b求和;
【思路】
首先,用字符串读入a,b,再将a,b 逆序存到数组中,然后对应位相加就行了,长度小的数要注意补零
倒过来做可以让进位变得方便 ,如果对应位的和大于等于10,就把余数储存在当前位置,后一位加1;
【代码】
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
int n,cas=1;
cin>>n;
int s1[1111];int s2[1111];
char a[1111];char b[1111];
while(n--)
{
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>a>>b;
if(cas!=1)
cout<<"\n";
cout<<"Case "<<cas<<":"<<endl;
cout<<a<<" "<<"+"<<" "<<b<<" "<<"="<<" ";
int lena=strlen(a);
int lenb=strlen(b);
char *max=0; //放到一块定义 char *max,*min //复习一下指针
char *min=0;
int maxl,maxs;
if(lena>=lenb)
{ max=a; min=b; maxl=lena; maxs=lenb;} //用max指针指向长度较大的数 min指向长度较小的数;
else
{ max=b; min=a; maxl=lenb; maxs=lena;}
for(int i=0;i<maxl;i++)
{
s1[i]= max[maxl-i-1]-48;//逆序存到数组
}
int k=0;
for(int i=0;i<maxl;i++)
{
if(i<maxs)
s2[i]=(min[maxs-i-1]-48);
else
s2[i]=0;//后面补零
}
int tt;
for( tt=0;tt<maxl;tt++)
{
int ans=s1[tt]+s2[tt];
if(ans>=10)
{
s1[tt]=ans%10;
s1[tt+1]+=1;
}
else
s1[tt]=ans;
}
if(s1[maxl]!=0)//如果和超过maxl,maxl+1;
maxl+=1;
for(int i=maxl-1;i>=0;i--)
cout<<s1[i];
cout<<endl;
cas++;
}
return 0;
}