大整数加法

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

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

OJ: noi_openjudge

题目 ID: ch0106-10

难度:入门

标签:高精度数学python

日期: 2026-07-30 23:01

题意

求两个不超过 200200 位的非负整数之和,并去除结果前导零。

思路

Python 的 int 是任意精度整数,读入时转换为 int 后直接相加即可。再次输出整数时,前导零会自然消失;全为零时会正确输出 0

代码

Python代码

python
first = int(input())
second = int(input())
print(first + second)

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++){
        num_3[i+1] = (num_3[i]+num_1[i]+num_2[i]  ) / 10;
        num_3[i] = (num_3[i]+num_1[i]+num_2[i]  ) % 10;
    }

    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),额外空间复杂度为 O(d)O(d)

总结

Python OJ 中遇到普通十进制大整数时,应优先确认内置 int 是否已足够。