高精度计算 /*高精度的加法运算*/
Posted gE_nis
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度计算 /*高精度的加法运算*/相关的知识,希望对你有一定的参考价值。
例 高精度加法运算
输入正整数 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; }
以上是关于高精度计算 /*高精度的加法运算*/的主要内容,如果未能解决你的问题,请参考以下文章