1091: 大大的求和
Posted mist2019
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1091: 大大的求和相关的知识,希望对你有一定的参考价值。
题目描述
小明在做小红给他出的算术题加法题,但是小红为了治一治小明懒惰的毛病,给他出的数都很大,这下小明郁闷了,想请你帮忙。
输入
输入的第一行是一个正整数N,表示一共有N组测试数据。
每组数据由1~100行正整数组成,每行正整数的长度不大于100位。
当输入0时,表示此组数据输入完毕。
每组数据由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: 大大的求和的主要内容,如果未能解决你的问题,请参考以下文章