-
题目描述:
-
实现一个加法器,使其能够输出a+b的值。
-
输入:
-
输入包括两个数a和b,其中a和b的位数不超过1000位。
-
输出:
-
可能有多组测试数据,对于每组数据,
输出a+b的值。
-
样例输入:
-
2 6 10000000000000000000 10000000000000000000000000000000
-
样例输出:
-
8 10000000000010000000000000000000
思路:该题考查的大整数数加法,题目已明确1000位以内,c中int的范围达不到,初步的思路有2个。
第一是用java语言实现,java中有大整数的封装直接调用;
第二是申请一个1000位的int数组,每个int数组保存一位。然后用加法对应位相加保存结果。第一中简单,这里我们用第二种方法实现
#include "stdio.h" #include "string.h" const int MAXN = 1000; int main() { char str1[MAXN]; //保存第一个加数 char str2[MAXN]; //保存第二个加数 int q1[MAXN]; //将第一个加数char型转成int型 int q2[MAXN]; //将第二个加数char型转成int型 int q[MAXN]; //保存结果 memset(str1,0,sizeof(str1)); memset(str2,0,sizeof(str2)); memset(q1,0,sizeof(q1)); memset(q2,0,sizeof(q2)); memset(q,0,sizeof(q)); while(scanf("%s%s",str1,str2)!=EOF) { int count1=strlen(str1); int count2=strlen(str2); //将第一加数char型转成int保存在Int数组中 for(int i=count1-1;i>=0;i--) { q1[count1-1-i]=str1[i]-'0'; } //将第二加数char型转成int保存在Int数组中 for(int i=count2-1;i>=0;i--) { q2[count2-1-i]=str2[i]-'0'; } int ans=0; //对应位相加 for(int j=0;j<MAXN;j++) { int temp=q1[j]+q2[j]+ans; ans=temp/10; q[j]=temp%10; } int t; for(t=MAXN-1;t>=0;t--) if(q[t]) break; for(;t>=0;t--) { printf("%d",q[t]); } printf("\n"); } return 1; }