3116 高精度练习之加法
题目描述 Description给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。
输入描述 Input Description读入两个用空格隔开的正整数
输出描述 Output Description输出A+B的值
样例输入 Sample Input3 12
样例输出 Sample Output15
数据范围及提示 Data Size & Hint两个正整数的位数不超过500位
近几天会做一套高精度专题,主要练习高精度加法、高精度减法、高精度乘法。
模拟加法的手算过程,注意进位的处理。
附AC代码:
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 int a[510],b[510],c[510]; 6 7 int main(){ 8 string al,bl; 9 cin>>al>>bl; 10 memset(a,0,sizeof(a)); 11 memset(b,0,sizeof(b)); 12 memset(c,0,sizeof(c)); 13 int lena=al.size(); 14 int lenb=bl.size(); 15 for(int i=0;i<lena;i++){//将两加数反向输入数组 16 a[lena-i]=al[i]-48;//此处也可用“-‘0’”代替 17 } 18 for(int i=0;i<lenb;i++){ 19 b[lenb-i]=bl[i]-48; 20 } 21 int lenc=1; 22 int x=0; 23 while(lenc<=lena||lenc<=lenb){//模拟加法运算 24 c[lenc]=a[lenc]+b[lenc]+x; 25 x=c[lenc]/10; 26 c[lenc]%=10; 27 lenc++; 28 } 29 c[lenc]=x; 30 if(c[lenc]==0){//去除开头为0的情况 31 lenc--; 32 } 33 for(int i=lenc;i>=1;i--){//输出最终和 34 cout<<c[i]; 35 } 36 cout<<endl; 37 return 0; 38 }