题目链接: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; }
时间: 2024-10-09 21:42:43