Skip to content

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;