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

hdoj 1047 Integer Inquiry

2015-07-24 20:01 435 查看

Integer Inquiry

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 15221 Accepted Submission(s): 3912


[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

英语烂真心伤不起,愣是看不懂题目的意思,刚开始以为是首先输入一个整数,表示输入数据的组数
(我以为是每一组三个字符串)当整数为0时不作处理程序结束,结果提交上一直超时;后来看了舍友的题解才知道
此题的意思是:
输入一个整数代表可以测试数据组数,输入多组字符串,当字符串为0时输入结束,计算所有字符串(超长整数的和)

#include<stdio.h>
#include<string.h>
#define MAX 510
#define max(x,y)(x>y?x:y)
char s1[MAX];
int a[MAX],b[MAX];
int main()
{
int n,m,j,i,s,t,l1,k,ok;
int len;
scanf("%d",&t);
while(t--)
{
ok=0;
memset(b,0,sizeof(b));
while(scanf("%s",s1))
{
if(s1[0]=='0')
break;
ok++;
memset(a,0,sizeof(a));
l1=strlen(s1);
for(i=l1-1,j=0;i>=0;i--)
{
a[j]=s1[i]-'0';
j++;
}
for(i=0;i<MAX;i++)
{
b[i]+=a[i];
if(b[i]>=10)
{
b[i]-=10;
b[i+1]++;
}
}
}
if(!ok)
printf("0\n");
else
{
for(i=MAX-1;i>=0;i--)
if(b[i]!=0)
break;
for(;i>=0;i--)
printf("%d",b[i]);
printf("\n");
}
if(t)
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: