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

hdu acm-1047 Integer Inquiry(大数相加)

2014-05-02 19:57 381 查看

Integer Inquiry

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


[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

仅仅为了存一个高精度大数相加的模板

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <cstring>
#include <math.h>
#include <ctime>
using namespace std;
#define maxn 32768
void add(char a[],char b[],char back[])
{
int i,j,k,up,x,y,z,l;
char *c;
if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
c=(char *) malloc(l*sizeof(char));
i=strlen(a)-1;
j=strlen(b)-1;
k=0;up=0;
while(i>=0||j>=0)
{
if(i<0) x='0'; else x=a[i];
if(j<0) y='0'; else y=b[j];
z=x-'0'+y-'0';
if(up) z+=1;
if(z>9) {up=1;z%=10;} else up=0;
c[k++]=z+'0';
i--;j--;
}
if(up) c[k++]='1';
i=0;
c[k]='\0';
for(k-=1;k>=0;k--)
back[i++]=c[k];
back[i]='\0';
}

int main()
{
int n;
scanf("%d",&n);
char a[maxn]="0";
while(n--)
{
char b[maxn],c[maxn];
memset(b,'\0',sizeof(b));
memset(c,'\0',sizeof(c));
memset(a,'\0',sizeof(a));
a[0]='0';
while(1)
{
scanf("%s",b);
if(b[0]=='0')
break;
add(a,b,c);
strcpy(a,c);
memset(b,'\0',sizeof(b));
memset(c,'\0',sizeof(c));
}
if(n==0)
printf("%s\n",a);
else
printf("%s\n\n",a);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: