首页 > 其他 > 详细

wiki oi 3116 高精度练习之加法

时间:2014-12-28 01:39:17      阅读:285      评论:0      收藏:0      [点我收藏+]
题目描述 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 高精度练习之加法

原文:http://www.cnblogs.com/ganhang-acm/p/4189472.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!