精华内容
下载资源
问答
  • 大数减法

    2019-08-18 12:34:57
    大数减法的基本思想和大数加法一样,都是存储成数组的形式,按位进行计算 大数减法的特殊性在于不够减时候的借位 代码实现 关键逻辑见注释 #include<iostream> #include<cstring> using namespace std;...

    分析思路

    • 大数减法的基本思想和大数加法一样,都是存储成数组的形式,按位进行计算
    • 大数减法的特殊性在于不够减时候的借位

    代码实现

    关键逻辑见注释

    #include<iostream>
    #include<cstring>
    using namespace std;
    //用字符串比较方式判断两个数的大小
    bool stringcmp(char *p1, char *p2) {
        if (strlen(p1) > strlen(p2)) return true;
        if (strlen(p1) == strlen(p2)) {
            if (strcmp(p1, p2) > 0) return true;
        }
        return false;
    }
    
    int *sub(int *ans, char *a, char *b) {
        int len1 = strlen(a);
        int len2 = strlen(b);
        int *tmp1 = (int *) calloc(0, sizeof(int) * 100);
        int *tmp2 = (int *) calloc(0, sizeof(int) * 100);
        ans[0] = len1;
        //字符转数字
        for (int i = 1; i <= len1; ++i) {
            tmp1[i] = a[len1 - i] - '0';
        }
        for (int i = 1; i <= len2; ++i) {
            tmp2[i] = b[len2 - i] - '0';
        }
    
        int bit = 0; // 定义一个错位变量
        for (int i = 1; i <= len1; ++i) {
            if (tmp1[i] - bit >= tmp2[i]) {
                ans[i] = tmp1[i] - tmp2[i] - bit;
                bit = 0;
            } else {
                ans[i] = tmp1[i] + 10 - tmp2[i] - bit;
                bit = 1;
            }
            //去前置零
            if (i == len1 && ans[len1] == 0 && i > 1) {
                ans[0]--;
            }
        }
        return ans;
    }
    //二维指针交换两个字符串的值
    void string_swap(char **x, char **y) {
        char *tmp;
        tmp = *x;
        *x = *y;
        *y = tmp;
        return;
    }
    
    int main() {
        char num1[100] = {0};
        char num2[100] = {0};
        cin >> num1 >> num2;
        int *ans = (int *) calloc(0, sizeof(int) * 100);
        if (!stringcmp(num1, num2)) {
            char *n1 = num1;
            char *n2 = num2;
            string_swap(&n1,&n2);
            ans = sub(ans, n1, n2);
            for (int i = ans[0]; i >= 1; i--) {
                i == ans[0] && cout << "-";
                cout << ans[i];
            }
        } else {
            ans = sub(ans, num1, num2);
            for (int i = ans[0]; i >= 1; i--) {
                cout << ans[i];
            }
        }
        
        return 0;
    }
    
    展开全文
  • 大数减法.cpp

    2021-09-14 07:59:44
    大数减法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,732
精华内容 2,692
关键字:

大数减法