2205 Problem B

问题 B: 【高精度】简单高精度加法

时间限制: 1 Sec  内存限制: 64 MB 提交: 77  解决: 25 [提交][状态][讨论版]

题目描述

修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数A、B的和,其中A和B的位数在5000位以内。

输入

共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在5000以内。

输出

输出一个非负数,即两数之和。

样例输入

1111111111
2222222222

样例输出

3333333333


 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 using namespace std;
 5 char a[5555],b[5555];
 6 int tag=0,c[5555];
 7 int na,nb,cut;
 8 int i,j;
 9 int main()
10 {
11     while(cin>>a>>b){
12         tag=0;
13         na=strlen(a)-1;
14         nb=strlen(b)-1;
15         cut=max(na,nb);
16         for(i=na,j=nb;i>=0&&j>=0;i--,j--){
17             tag=(a[i]-'0')+(b[j]-'0')+tag;
18             if(i==0&&j==0){
19                 c[cut--]=tag;
20             }
21             if(tag>=10){
22                 c[cut--]=tag%10;
23                 tag=1;
24             }
25             else{
26                 c[cut--]=tag;
27                 tag=0;
28             }
29         }
30         while(i>=0){
31             tag=(a[i]-'0')+tag;
32             if(i==0){
33                 c[cut--]=tag;
34             }
35             if(tag>=10){
36                 c[cut--]=tag%10;
37                 tag=1;
38             }
39             else{
40                 c[cut--]=tag;
41                 tag=0;
42             }
43             i--;
44         }
45         while(j>=0){
46             tag=(b[j]-'0')+tag;
47             if(j==0){
48                 c[cut--]=tag;
49             }
50             if(tag>=10){
51                 c[cut--]=tag%10;
52                 tag=1;
53             }
54             else{
55                 c[cut--]=tag;
56                 tag=0;
57             }
58             j--;
59         }
60         cut=max(na,nb);
61         for(i=0;i<=cut;i++){
62             cout<<c[i];
63         }
64         cout<<endl;
65         memset(a,0,sizeof(a));
66         memset(b,0,sizeof(b));
67         memset(c,0,sizeof(b));
68     }
69     return 0;
70 }
原文地址:https://www.cnblogs.com/asuml/p/5673988.html