码迷,mamicode.com
首页 > 其他好文 > 详细

wiki oi 3116 高精度练习之加法

时间:2014-12-28 01:41:17      阅读:171      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!