关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

高精密测算认识

发布时间:2020-03-10 00:00:00

高精密测算选用仿真模拟列坚式法。
一般测算用正数,针对负值,解决标记位。

1.高精密数的储存

基础观念
用数组储放和表达高精密整数金额。一个数组原素,储放高精密整数金额中的一位。
以便有利于测算,将数由底位到上位先后存有数组下标相匹配由低到高的部位上,在其中,数组的第0个下标相匹配部位储存该数的十位数。

#include#include#define MAX_LEN 200
int sz[MAX_LEN + 10];
char szLine[MAX_LEN + 10];

int main()
{
    int len, i;
    scanf("%s", szLine);
    memset(sz, 0, sizeof(sz));/*数组清零*/
    sz[0] = strlen(szLine);
    for (i = 1; i <= sz[0]; i++) {
        sz[i] = szLine[sz[0] - i] - '0';
    }
    return 0;
}

2.高精密数较为

int cmp(int a[], int b[]) {
    int i;
    if (a[0] > b[0]) {
        return 1;
    }
    else if (a[0] < b[0]) {
        return -1;
    }
    for (i = a[0]; i >= 1; i--) {
        if (a[i] > b[i]) {
            return 1;
        }
        else if (a[i] < b[i]) {
            return -1;
        }
    }
    return 0;
}

3.高精密加法

void plus(int a[], int b[]) {
    int i;
    if (a[0] < b[0]) {
        a[0] = b[0];
    }
    for (i = 1; i = 10) {
            a[i + 1]++;
            a[i] -= 10;
        }
    }
    if (a[a[0] + 1] != 0) {
        a[0]++;
    }
}

4.高精密减法

int minus(int a[], int b[]) {
    int i;
    if (cmp(a, b) == 0) {
        memset(a, 0, sizeof(a));
        a[0] = 1;
        return 0;
    }
    else if (cmp(a, b) > 0) {
        for (i = 1; i <= a[0]; i++) {
            a[i] = a[i] - b[i];
            if (a[i] < 0) {
                a[i + 1] -= 1;
                a[i] += 10;
            }
        }
        while (a[a[0]] == 0) {
            a[0]--;
        }
        return 1;
    }
    else {
        minus(b, a);
        for (i = 0; i <= b[0]; i++) {
            a[i] = b[i];
        }
        return -1;
    }
}/*返回值表达减法結果的标记*/

参考文献:从零开始学优化算法:高精密测算->强推


/template/Home/Zkeys/PC/Static