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

hdu 1047 Integer Inquiry

2015-03-13 12:47 302 查看

Integer Inquiry

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


[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 <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <ctype.h>
#include <map>
#include <string>
#include <set>
#include <bitset>
#include <utility>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <iostream>
#include <fstream>
#include <list>
using  namespace  std;

const  int MAXL=120;
struct  BigNum
{
int  num[MAXL];
int  len;
BigNum()
{
memset(num,0,sizeof(num));
}
};
//高精度加法
BigNum  Add(BigNum &a, BigNum &b)
{
BigNum c;
int  i, len;
len = (a.len > b.len) ? a.len : b.len;
memset(c.num, 0, sizeof(c.num));
for(i = 0; i < len; i++)
{
c.num[i] += (a.num[i]+b.num[i]);
if(c.num[i] >= 10)
{
c.num[i+1]++;
c.num[i] -= 10;
}
}
if(c.num[len])
len++;
c.len = len;
return  c;
}
void  print(BigNum &a)   //输出大数
{
int  i;
for(i = a.len-1; i >= 0; i--)
printf("%d", a.num[i]);
puts("");
}

void Init(BigNum &a, char *s, int &tag)   //将字符串转化为大数
{
int  i = 0, j = strlen(s);
if(s[0] == '-')
{
j--;
i++;
tag *= -1;
}
a.len = j;
for(; s[i] != '\0'; i++, j--)
a.num[j-1] = s[i]-'0';
}

int main(void)
{
//freopen("in.txt","r",stdin);
int n;
scanf("%d",&n);
char s[MAXL];
while(n--)
{
getchar();
BigNum a;
int tag=1;
Init(a,"0",tag);
while(scanf("%s",s))
{
BigNum b;
if(strcmp(s,"0")==0)
break;
int tag=1;
Init(b,s,tag);
a=Add(a,b);
}
print(a);
if(n)
printf("\n");
}
return 0;
}


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