1091: 大大的求和

Posted mist2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1091: 大大的求和相关的知识,希望对你有一定的参考价值。

题目描述

小明在做小红给他出的算术题加法题,但是小红为了治一治小明懒惰的毛病,给他出的数都很大,这下小明郁闷了,想请你帮忙。

输入

输入的第一行是一个正整数N,表示一共有N组测试数据。
每组数据由1~100行正整数组成,每行正整数的长度不大于100位。
当输入0时,表示此组数据输入完毕。

输出

对于每组输入数据,输出所有数字的总和。每两组输出数据之间有一个空行。

样例输入

2
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
12
34
0

样例输出

370370367037037036703703703670

46
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<string.h>
 4 using namespace std;
 5 struct bign{
 6     int d[110];
 7     int len;
 8     bign(){
 9         memset(d,0,sizeof(d));
10         len=0;
11     }
12 };
13 bign change(char c[]){
14     bign b;
15     b.len=strlen(c);
16     for(int i=0;i<b.len;i++){
17         b.d[i]=c[b.len-i-1]-0;
18     }
19     return b;
20 }
21 bign add(bign a,bign b){
22     bign c;
23     int carry=0;
24     for(int i=0;i<a.len || i<b.len;i++){
25         int temp=a.d[i]+b.d[i]+carry;
26         c.d[c.len++]=temp%10;
27         carry=temp/10;
28     }
29     if(carry!=0){
30         c.d[c.len++]=carry;
31     }
32     return c;
33 }
34 int main(){
35     int n;
36     scanf("%d",&n);
37     while(n--){
38         bign t;
39         while(true){
40             char str[110];
41             scanf("%s",str);
42             if(str[0]==0){
43                 break;
44             }
45             t=add(t,change(str));
46         }
47         for(int i=t.len-1;i>=0;i--){
48             printf("%d",t.d[i]);
49         }
50         printf("
");
51         printf("
");
52     }
53     return 0;
54 } 

Mist Note:本题主要考察高精度加法,在学习《算法笔记》章节后,灵活运用到本题,就可以破解本题。注意输出格式,输出数据之间会有一个空行。



以上是关于1091: 大大的求和的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段的算法复杂度

PAT1091:Acute Stroke

1091 acute stroke

Notepad++编辑器——Verilog代码片段直接编译

ZZNUOJ_C语言1091:童年生活二三事(多实例测试)(完整代码)

1091. Acute Stroke (30)搜索——PAT (Advanced Level) Practise