高精度计算题目合集
高精度计算题目合集
- 1168:大整数加法
1168:大整数加法
1168:大整数加法
高精度加法原理:
a,b,c 都可以用数组表示。这些都是基于c语言的算术运算符形成的运算。
c 3 = ( c 1 + c 2 ) % 10 c_3=(c_1+c_2)\%10 c3=(c1+c2)%10
c = ( c 1 + c 2 ) / 10 c=(c_1+c_2)/10 c=(c1+c2)/10
b 3 = ( b 1 + b 2 + c ) % 10 b_3=(b_1+b_2+c)\%10 b3=(b1+b2+c)%10
b = ( b 1 + b 2 + c ) / 10 b=(b_1+b_2+c)/10 b=(b1+b2+c)/10
a 3 = ( a 1 + a 2 + b ) % 10 a_3=(a_1+a_2+b)\%10 a3=(a1+a2+b)%10
a = ( a 1 + a 2 + b ) / 10 a=(a_1+a_2+b)/10 a=(a1+a2+b)/10
这题虽然不考虑负数的情况,但这个参考程序还是考虑了都为负数的情况。正数和负数相加实际上是减法的范畴。
参考程序
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS 1
#endif
#include<iostream>
int f0() {
using namespace std;
string a, b, c;
int up = 0, flag = 0;
cin >> a >> b;
//负数加负数
if (a[0] == '-' && b[0] == '-') {
a.erase(0, 1); b.erase(0, 1);
flag = 1;
}
//补齐长度
while (a.size() < b.size())
a = '0' + a;
while (b.size() < a.size())
b = '0' + b;
//加法核心
for (int i = a.size() - 1; i >= 0; i--) {
c = (char)((a[i] - '0' + b[i] - '0' + up) % 10 + '0') + c;
up = (a[i] - '0' + b[i] - '0' + up) / 10;
}
//去除前导0
while (*c.begin() == '0' && c.size() > 1)
c.erase(0, 1);
//两个负数相加
if (flag == 1)
c = '-' + c;
cout << c;
return 0;
}
int main() {
return f0();
}