您的位置:首页 > 产品设计 > UI/UE

hdoj 1047 Integer Inquiry 【多个大数相加】

2015-09-04 16:55 483 查看

Integer Inquiry

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 15747 Accepted Submission(s): 4041



[align=left]Problem Description[/align]
One of the first users of BIT's new supercomputer was Chip Diller. He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers.

``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.)

[align=left]Input[/align]
The input will consist of at most 100 lines of text, each of which contains a single VeryLongInteger. Each VeryLongInteger will be 100 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).

The final input line will contain a single zero on a line by itself.

[align=left]Output[/align]
Your program should output the sum of the VeryLongIntegers given in the input.

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.

[align=left]Sample Input[/align]

1

123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0


[align=left]Sample Output[/align]

370370367037037036703703703670


[align=left]Source[/align]
East Central North America 1996

思路:

多个大数相加,其实和多个数相加一样的,就是将多个数相加的过程变的更加复杂了点,用到了大数相加的方法!还有这道题的输出格式要注意,每个数据块之间要有空行!

代码:

#include <stdio.h>
#include <string.h>
char a[105];
int a1[105];
int s[10005];
int main()
{
int T;
int flag=0;
scanf("%d",&T);
while(T--)
{
if(flag==0)
{
flag=1;
}
else
printf("\n");
memset(s,0,sizeof(s));
while(scanf("%s",a)&&a[0]!='0')//以%s输入的话,就不需要加getchar()!
{
int len=strlen(a);
int t=0;
memset(a1,0,sizeof(a1));
for(int i=len-1;i>=0;i--)
{
a1[t++]=a[i]-'0';
}
for(int i=0;i<len;i++)
{
s[i]+=a1[i];
if(s[i]>=10)
{
s[i+1]+=s[i]/10;//记住:这一点是+=而不是赋值
s[i]%=10;
}
}
}
int i;
for(i=110;i>=0&&s[i]==0;i--);
if(i>=0)
{
for(;i>=0;i--)
{
printf("%d",s[i]);
}
}
else
printf("0");
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: