利用 Python 任意精度整数直接完成不超过 200 位的非负整数加法。
OJ: noi_openjudge
题目 ID: ch0106-10
难度:入门
标签:高精度数学python
日期: 2026-07-30 23:01
题意
求两个不超过
思路
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;
}复杂度
设较长数字有
总结
Python OJ 中遇到普通十进制大整数时,应优先确认内置 int 是否已足够。