【TFLSnoi李志帅】第四篇文章---高精度加法

满分代码,制作不易,不喜勿喷

1168:大整数加法


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 34543     通过数: 10605

【题目描述】

求两个不超过200位的非负整数的和。

【输入】

有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。

【输出】

一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

【输入样例】

22222222222222222222
33333333333333333333

【输出样例】

55555555555555555555


 

 代码:



——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 char sa[1005],sb[1005];//由于long long的数据范围是2^63-1,也就是19位数,本题数据规模超出范围,所以要用到数组;
 4 int la,lb,lc,a[1005],b[1005],c[1005]={0},jw=0,sum=0;
 5 int main()
 6 {
 7     gets(sa);
 8     gets(sb);
 9     la=strlen(sa);
10     lb=strlen(sb);
11     lc=la>lb ? la : lb;//lc=la>lb?la:lb可以写作if(la>lb)lc=la;else lc=lb;
12     for( int i=0;i<la;i++)
13     {
14         a[la-1-i]=sa[i]-'0';//注意a数组是char类型,sa数组是int类型,两者转换需要-‘0’
15     }
16     for(int i=0;i<lb;i++)
17     {
18         b[lb-1-i]=sb[i]-'0';
19     }
20     for(int i=0;i<=lc;i++)
21     {
22         c[i]=(a[i]+b[i]+jw)%10;//jw专门负责储存进位
23         jw=(a[i]+b[i]+jw)/10;
24     }
25     if(jw!=0) lc++,c[lc]=jw;//处理最高位进位问题
26     for(int i=lc-1;i>=0;i--)
27     {
28         if(c[i]!=0)break;
29         else sum++;//负责处理前置零问题
30     }
31     for(int i=lc-1-sum;i>=0;i--)
32     {
33         cout<<c[i];
34     }
35     return 0;
36 }

 

posted @ 2020-08-19 17:53  九州霜  阅读(175)  评论(0编辑  收藏  举报