题目1198:a+b【字符串】
- 题目描述:
-
实现一个加法器,使其能够输出a+b的值。
- 输入:
-
输入包括两个数a和b,其中a和b的位数不超过1000位。
- 输出:
-
可能有多组测试数据,对于每组数据,
输出a+b的值。
- 样例输入:
-
2 6 10000000000000000000 10000000000000000000000000000000
- 样例输出:
-
8 10000000000010000000000000000000
感觉这道题很不严谨啊 测试用例应该只是 算两个正数的和 然后我搞了很久 正+负 负+负。。。。虽然有没做出来吧。。。。
#include<stdio.h> #include<iostream> #include<string> #include<string.h> using namespace std; int a[1005],b[1005],c[1005],d[1005];//c 进位 d 结果位 string sa,sb; int main(){ while(cin>>sa){ cin>>sb; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); for(int i=sa.size()-1,j=1002;i>=0;i--,j--){ a[j]=(sa[i]-48); } for(int i=sb.size()-1,j=1002;i>=0;i--,j--){ b[j]=(sb[i]-48); } int bitmax=sa.size()>sb.size()?sa.size()+1:sb.size()+1; for(int i=1002;i>1002-bitmax;i--){ d[i]=(a[i]+b[i]+c[i])%10; c[i-1]=(a[i]+b[i]+c[i])/10; } int flagg=0; for(int j=1003-bitmax;j<1003;j++){ if(flagg==0&&d[j]==0&&j!=1002){ continue; } flagg=1; cout<<d[j]; } cout<<endl; } return 0; }