高精度加法
使用数组存储每个数字的每个位数,对于两个输入的超长整数字符串,程序能够在逐位相加时实现进位。最后将结果再次转化为字符串输出。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #include<iostream> #include<cstring>
using namespace std;
void rev(int fir[], int sec[], string a, string b) { for(int i = 0; i < a.length(); i++) { fir[i] = a[a.length() - i - 1] - '0'; } for(int i = 0; i < b.length(); i++) { sec[i] = b[b.length() - i - 1] - '0'; } }
bool max(int a, int b) { return a > b ? a : b; }
int main() { string a, b; int fir[202], sec[202], ans[202] ; int i, x, len;
while (cin >> a >> b) { len = max(a.length(), b.length()); for(i = 0; i <= len; i++) { fir[i] = 0; sec[i] = 0; ans[i] = 0; }
rev(fir, sec, a, b);
x = 0; for(i = 0; i <= len; i++) { ans[i] = fir[i] + sec[i] + x; x = ans[i] / 10; ans[i] %= 10; }
if(ans[len] == 0) { len--; }
for(int i = len; i >= 0; i--) { cout << ans[i]; } cout << endl; } }
|
杂谈
这段代码实现了高精度加法的功能。
具体来说,代码中使用两个整型数组存储要相加的两个大整数,然后将这两个数组中的元素从低位到高位逐位相加,进位等操作都通过简单的循环结构实现。
这种方法的好处在于可以适用于任意长度的大整数,而不受固定长度的限制。