例 高精度加法运算
输入正整数 a 和 b,输出 a+b 的值。0<a,b<=10^250
输入:
第一行:a
第二行:b
输出:a+b 的和。
样例输入: 99
999
样例输出: 1098
分析: (1)加法运算 …… a[7] a[6] a[5] a[4] a[3] a[2] a[1]
…+… 0 0 b[5] b[4] b[3] b[2] b[1]
——————————————————————————————————
…… c[7] c[6] c[5] c[4] c[3] c[2] c[1]
运算的次数=max(la,lb)
(2)程序实现: 方法一:模拟手工计算,设置一个进位变量 m
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s1[300], s2[300];
int a[300], b[300], c[300];
int main()
{
int la, lb, lc, m=0;
cin >> s1 >> s2;
la = strlen(s1);
lb = strlen(s2);
for(int i=1;i<=la;i++)
a[i] = s1[la-i] - 48;
for(int i=1;i<=lb;i++)
b[i] = s2[lb-i] - 48;
if(la > lb)
lc = la;
else
lc = lb;
for(int i=1;i<=lc;i++)
{
c[i] = (m+a[i]+b[i]) % 10;
m = (m+a[i]+b[i]) / 10;
}
if(m==1)
{
lc++;
c[lc] = 1;
}
for(int i=lc;i>=1;i--)
cout << c[i];
cout << endl;
return 0;
}
方法二:先计算,最后处理进位
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s1[300], s2[300];
int a[300], b[300], c[300];
int main()
{
int la, lb, lc;
cin >> s1 >> s2;
la = strlen(s1);
lb = strlen(s2);
for(int i=1;i<=la;i++)
a[i] = s1[la-i] - 48;
for(int i=1;i<=lb;i++)
b[i] = s2[lb-i] - 48;
if(la > lb)
lc = la;
else
lc = lb;
for(int i=1;i<=lc;i++)
c[i] = a[i]+b[i];
for(int i=1;i<=lc;i++)
{
c[i+1] = c[i+1] + c[i]/10;
c[i] = c[i] % 10;
}
if(c[lc+1] == 1)
lc++;
for(int i=lc;i>=1;i--)
cout << c[i];
cout << endl;
return 0;
}