- 题目描述:
-
实现一个加法器,使其能够输出a+b的值。
- 输入:
-
输入包括两个数a和b,其中a和b的位数不超过1000位。
- 输出:
-
可能有多组测试数据,对于每组数据,
输出a+b的值。
- 样例输入:
-
2 6 10000000000000000000 10000000000000000000000000000000
- 样例输出:
-
8 10000000000010000000000000000000 Code:
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int ans_a[1010],ans_b[1010]; void init(int buf[],int len){ for(int i=0;i<len;i++){ buf[i]=0; } } void charToInt(char buf1[],int len1,char buf2[],int len2){ for(int i=0;i<len1;i++){ ans_a[i]=buf1[i]-‘0‘; } for(int j=0;j<len2;j++){ ans_b[j]=buf2[j]-‘0‘; } } int main() { char a[1010],b[1010]; int ans[1010]; while(scanf("%s%s",a,b)!=EOF){ int len_a=strlen(a); int len_b=strlen(b); init(ans_a,len_a+10); init(ans_b,len_b+10); charToInt(a,len_a,b,len_b); int c=0,cnt=0; int i,j; bool flag=false; for(i=len_a-1,j=len_b-1;i>=0&&j>=0;i--,j--){ ans[cnt]=(ans_a[i]+ans_b[j]+c)%10; c=(ans_a[i]+ans_b[j]+c)/10; ++cnt; } if(i<0){ while(j>=0){ ans[cnt]=(ans_b[j]+c)%10; c=(ans_b[j]+c)/10; ++cnt; --j; } if(c!=0){ ans[cnt]=c; flag=true; } } if(j<0){ while(i>=0){ ans[cnt]=(ans_a[i]+c)%10; c=(ans_a[i]+c)/10; ++cnt; --i; } if(c!=0){ ans[cnt]=c; flag=true; } } if(flag==true){ for(int index=cnt;index>=0;index--){ cout<<ans[index]; } cout<<endl; } if(flag==false){ for(int index=cnt-1;index>=0;index--){ cout<<ans[index]; } cout<<endl; } } return 0; } /************************************************************** Problem: 1198 User: lcyvino Language: C++ Result: Accepted Time:100 ms Memory:1528 kb ****************************************************************/
时间: 2024-10-13 00:54:25