HDU_1047Integer Inquiry
Integer Inquiry
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 23392 Accepted Submission(s): 6600
``This supercomputer is great,'' remarked Chip. ``I only wish Timothy were here to see these results.'' (Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.)
The final input line will contain a single zero on a line by itself.
This problem contains multiple test cases!
The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.
The output format consists of N output blocks. There is a blank line between output blocks.
这一道题只要是会大数加法其实就能做出来,不过里边的坑比较多。尤其是输入0(非测试数据个数)的时候,还需要输出 0
这个坑很难发现...WA 了好多次
char s[maxn];//得到需要相加的数
int a[maxn];//保存这个数
int ans[maxn];//保存所有数的和
/*
多个大数相加
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e3;
char s[maxn];//得到需要相加的数
int a[maxn];//保存这个数
int ans[maxn];//保存所有数的和
int main()
{
int n;
scanf("%d",&n);//测试样例
while(n--)
{
int lenx=0;//最长数的长度
memset(ans,0,sizeof(ans));//初始化所有数的和
while(true)//不是 0 的话就一直循环
{
memset(a,0,sizeof(a));
scanf("%s",s);//
int len=strlen(s);
if(len==1&&s[0]=='0') break;//退出循环的条件
lenx=max(lenx,len);
for(int i=len-1,j=0;i>=0;i--,j++) a[j]=s[i]-'0';
int temp=0;
for(int i=0;i<lenx;i++)
{
ans[i]=ans[i]+a[i]+temp;
temp=ans[i]/10;
ans[i]%=10;
}
if(temp)//进位
{
ans[lenx]=temp;
lenx++;
}
}
if(lenx==0) printf("0");//emmmmmmm,这里是个坑,
for(int i=lenx-1;i>=0;i--)
printf("%d",ans[i]);
printf("\n");
if(n) printf("\n"); //需要多输出一行是空行
}
return 0;
}
1万+



被折叠的 条评论
为什么被折叠?



