大数加法
A + B 和 C 1551
看到题解里,没有大数加法的,就补充一个,小白,代码写的很菜,欢迎指教
思路是分情况讨论,把各种情况转化为a+b与c比较
C++ 代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//判断a+b与c比较
//a+b>c返回1,<返回2,==返回3
int judge(string a,string b,string c){
int aSize=a.size();
int bSize=b.size();
int cSize=c.size();
string cur;
int aPoint=0,bPoint=0;
int carry=0;
int abit,bbit;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int i=0;
while(true){
abit=bbit=0;
if(aPoint<aSize){
abit=a[aPoint]-'0';
aPoint++;
}
if(bPoint<bSize){
bbit=b[bPoint]-'0';
bPoint++;
}
int cu=abit+bbit+carry;
if(cu>=10)
carry=1;
else carry=0;
cur.push_back(cu%10+'0');
i++;
if(aPoint>=aSize && bPoint>=bSize && carry==0)
break;
}
reverse(cur.begin(),cur.end());
int curSize=cur.size();
if(curSize>cSize)
return 1;
if(curSize<cSize)
return 2;
if(curSize==cSize)
for(int j=0;j<cSize;j++){
if(cur[j]>c[j])
return 1;
if(cur[j]<c[j])
return 2;
}
return 3;
}
int main() {
//大数加法
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
string a,b,c;
cin>>a>>b>>c;
//判定这三个数的正负情况
bool A=true,B=true,C=true;
if(a[0]=='-'){
A= false;
a.erase(a.begin());
}
if(b[0]=='-'){
B= false;
b.erase(b.begin());
}
if(c[0]=='-'){
C=false;
c.erase(c.begin());
}
if(A==true && B==true && C==false) printf("Case #%d: true\n",i+1);
else if(A==false && B==false && C==true) printf("Case #%d: false\n",i+1);
else if(A==true && B==true && C==true){//a+b?c
if(judge(a,b,c)==1)
printf("Case #%d: true\n",i+1);
else
printf("Case #%d: false\n",i+1);
}
else if(A==true && B==false && C==true){//a-b?c
if(judge(b,c,a)!=2)
printf("Case #%d: false\n",i+1);
else
printf("Case #%d: true\n",i+1);
}
else if(A==true && B==false && C==false){//a-b?-c
if(judge(a,c,b)==1)
printf("Case #%d: true\n",i+1);
else
printf("Case #%d: false\n",i+1);
}
else if(A==false && B==false && C==false){//-a-b?-c
if(judge(a,b,c)!=2)
printf("Case #%d: false\n",i+1);
else
printf("Case #%d: true\n",i+1);
}
else if(A==false && B==true && C==true){//-a+b?c
if(judge(a,c,b)!=2)
printf("Case #%d: false\n",i+1);
else
printf("Case #%d: true\n",i+1);
}
else if(A==false && B==true && C==false){//-a+b?-c
if(judge(c,b,a)==1)
printf("Case #%d: true\n",i+1);
else
printf("Case #%d: false\n",i+1);
}
}
return 0;
}