【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 }