大整数减法

GitHub跳转原题关系图返回列表

利用 Python 任意精度整数直接完成不超过 200 位的正整数减法。

OJ: noi_openjudge

题目 ID: ch0106-11

难度:入门

标签:高精度数学python

日期: 2026-07-30 23:01

题意

给定 a>ba>b 的两个不超过 200200 位正整数,输出 aba-b

思路

Python 的 int 不受 C++ 基础整数位数限制,直接读入并相减即可,借位与前导零由运行时处理。

代码

Python代码

python
minuend = int(input())
subtrahend = int(input())
print(minuend - subtrahend)

C++代码

cpp
#include <cstdio>
#include <cstring>


char num_1[300];
char num_2[300];
int num_3[300] = {0};

int main(){
    scanf("%s",num_1);
    scanf("%s",num_2);
    int len_1 = strlen(num_1);
    int len_2 = strlen(num_2);
    int i,j;

    for(i=0;i<len_1/2;i++){
        char t = num_1[i];
        num_1[i] = num_1[len_1 -i -1];
        num_1[len_1 -i -1] = t;
    }
    for(i=0;i<len_2/2;i++){
        char t = num_2[i];
        num_2[i] = num_2[len_2 -i -1];
        num_2[len_2 -i -1] = t;
    }
    for (i=0;i<len_1;i++){
        num_1[i] -= '0';
    }

    for (i=0;i<len_2;i++){
        num_2[i] -= '0';
    }

    int max_len = len_1;
    if( max_len < len_2){
        max_len = len_2;
    }
    for (i=0;i<max_len;i++){
        if( num_1[i] < num_2[i]){
            num_1[i+1]--;
            num_3[i] = 10+num_1[i] - num_2[i];
        }
        else {
            num_3[i] = num_1[i] - num_2[i];
        }
    }

    bool is_begin_0 = true;
    for(i = max_len ;i>=0;i--){
        if( is_begin_0 && num_3[i] == 0) continue;
        is_begin_0 = 0;
        printf("%d",num_3[i]);
    }
    if( is_begin_0 )
        printf("0");

    return 0;
}

复杂度

设数字位数为 dd,时间复杂度和额外空间复杂度均为 O(d)O(d)

总结

语言自带任意精度时,应把精力放在题目逻辑而不是重复实现借位。