题目描述:
比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。
输入:
输入数据有多组。首先输入一个整数T,表示有T组输入。
每组输入两个大整数,并用空格隔开。每个整数最多1000位。没有负数输入。
输出:
对于每组输入,输出两个整数的和,单独占一行。
样例输入 :
2 1 2 112233445566778899 998877665544332211
样例输出 :
3 1111111111111111110
问题分析:
大整数的关键在于无法用整型和浮点型表示,用整型表示在数值非常大时会出现数据溢出,用浮点型会出现精度丢失的问题,所以我们考虑是否能把大整数当成字符来考虑,这样因为在录入字符串时自动以\0结束容易找出大整数的位数。
录入数字字符串后先将字符0~9的值转换成在内存中储存的值0~9的大小,然后直接对应位相加,相加后再对大于10的数对下一位进行加1同时自身减10。如图一:
代码实现:
#include<stdio.h>
int main(){
int T;
int w1,w2;
char x1[1001],x2[1001],x3[1001];
scanf("%d",&T);
for(int i=1;i<=T;i++){
w1=0,w2=0;
scanf("%s %s",&x1,&x2);
while(x1[w1]!='\0'){
w1++;
}
while(x2[w2]!='\0'){
w2++;
}
int x;
if(w2>=w1){
x=w1;
}else{
x=w2;
}
for(int i=0;i<x;i++){
x3[i]=x1[i]+x2[i]-'0'-'0';
}
if(w2>=w1){
x=w2;
}else{
x=w1;
}
for(int i=x-1;i>=0;i--){
if(x3[i]>=10){
if(i!=0){
x3[i-1]+=1;
x3[i]-=10;
}
}
}
for(int i=0;i<x;i++){
printf("%d",x3[i]);
}
printf("\n");
}
return 0;
}
图一样例结果:
样例结果:
提交结果: