TB椰程 TypeBuddy 打字搭子

高精度减法

CSP-J · 编程模板 · 片段 · cpp · 难度 3/5 · 共 734 字

数组按位存数字,借位处理大整数相减

  • 算法
  • 高精度减法

前置内容

正文

// 高精度减法:大整数相减
// 用数组按位存数字
// 借位:不够减向前一位借 1
// 结果可能为负,需特殊处理
#include <cstdio>
#include <cstring>
char s1[505], s2[505];
int a[505], b[505], c[505], la, lb;
int main() {
    scanf("%s%s", s1, s2);
    // 默认 s1 >= s2(否则先比较交换)
    la = strlen(s1);
    lb = strlen(s2);
    // 转成数字,低位在前
    for (int i = 0; i < la; i++)
        a[la - i] = s1[i] - '0';
    for (int i = 0; i < lb; i++)
        b[lb - i] = s2[i] - '0';
    // 逐位相减并借位
    for (int i = 1; i <= la; i++) {
        // 不够减就借位
        if (a[i] < b[i]) {
            a[i] += 10;
            a[i + 1]--;
        }
        c[i] = a[i] - b[i];
    }
    // 去掉前导 0
    while (la > 1 && c[la] == 0) la--;
    for (int i = la; i >= 1; i--)
        printf("%d", c[i]);
    return 0;
}

CSP-J · 编程模板的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK