
1 高精度计算
发布时间:
高精度计算中需要处理好以下几个问题:
(1)数据的接收方法和存贮方法
数据的接收和存贮:当输入的数很长时,可采用字符串方式输入,这样可输入数字很长的数,利用字符串函数和操作运算,将每一位数取出,存入数组中。另一种方法是直接用循环加数组方法输入数据。
js
#include <iostream>
using namespace std;
int main() {
string s;
int a[100];
cin >> s; // 读入字符串s
a[0] = s.length(); // 用a[0]计算字符串s的位数
for (int i = 1; i <= a[0]; i++) { // 将数串s转换为数组a,并倒序存储
a[i] = s[a[0] - i] - '0';
}
for (int i = a[0]; i > 0; i--) {
cout << a[i];
}
return 0;
}
(2) 高精度数位数的确定
位数的确定:接收时往往是用字符串的,所以它的位数就等于字符串的长度。
(3) 进位,借位处理
js
// 加法进位:
c[i] = a[i] + b[i];
if (c[i] >= 10) {
c[i] %= 10;
++c[i + 1];
}
// 减法借位:
if (a[i] < b[i]) {
--a[i + 1];
a[i] += 10;
}
c[i] = a[i] - b[i];
// 乘法进位:
c[i + j - 1] = a[i] * b[j] + x + c[i + j - 1];
x = c[i + j - 1] / 10;
c[i + j - 1] %= 10;