首页 > 代码库 > wiki oi 3116 高精度练习之加法
wiki oi 3116 高精度练习之加法
题目描述 Description
给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A+B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
15
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
分析:和减法一样,去掉了两个数的大小比较,发现没必要,还有发现不用判断cc大于10么, 直接cc%=10;
代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 char a[501],b[501]; 8 int c[502]; 9 int main()10 {11 cin>>a>>b;12 memset(c,0,sizeof(c));13 int alen=strlen(a);14 int blen=strlen(b);15 int i=alen-1,j=blen-1,k=0;16 int carry=0;17 while(i>=0&&j>=0)18 {19 int cc=(a[i--]-‘0‘)+(b[j--]-‘0‘)+carry;20 carry=cc/10;21 cc%=10;22 c[k++]=cc;23 }24 while(i>=0)25 {26 int cc=(a[i--]-‘0‘)+carry;27 carry=cc/10;28 cc%=10;29 c[k++]=cc;30 }31 while(j>=0)32 {33 int cc=(b[j--]-‘0‘)+carry;34 carry=cc/10;35 cc%=10;36 c[k++]=cc;37 }38 if(carry!=0)c[k++]=carry;//最后判断进位是不是为0不是要进一位 避免23+99=22;39 int last=k;40 for(int l=k; l>=0; l--)//找开头不是0的那个起点41 if(c[l]!=0)42 {43 last=l;44 break;45 }46 for(int l=last; l>=0; l--)printf("%d",c[l]);47 printf("\n");48 return 0;49 }
wiki oi 3116 高精度练习之加法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。