四种情况
测试样例1:
123456789
-11111111111111111111111111111
输出:
11111111111111111111234567900
测试样例:
-1321323123123123123124123123123
-9999999999999999999999999999999999999999
输出:
9999999998678676876876876876875876876876
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
//1、定义3个int 型数组
int a[1000],b[1000],c[1000];
//1.1 比较两个数大小
bool cmp(string s1,string s2){
if(s1.size()<s2.size()){
return false;
}
if(s1.size()==s2.size())
return s1>=s2;
return true;
}
bool add(string s1,string s2){
int la,lb,lc;
la=s1.size();//s1.length()
lb=s2.size();//s2.length()
for(int i=0;i<la;i++){
a[la-i]=s1[i]-'0';//将字符转换为数字,并且将字符倒序转置便于计算
}
for(int i=0;i<lb;i++){
b[lb-i]=s2[i]-'0';
}
lc=max(la,lb)+1;
for(int i=1;i<=lc;i++){
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]=c[i]%10;
}
if(c[lc]==0 && lc>0){//删除前导0
lc--;
}
for(int i=lc;i>0;i--){
cout<<c[i];
}
}
bool sub(string s1,string s2){
int lena,lenb,lenc=0,f=0;
if(!cmp(s1,s2)){
swap(s1,s2);
f=1;
}
lena=s1.size();
lenb=s2.size();
//2、倒序存储
for(int i=0;i<lena;i++){
a[i]=s1[lena-1-i]-'0';
}
for(int i=0;i<lenb;i++){
b[i]=s2[lenb-1-i]-'0';
}
//3、按位相减
lenc=max(lena,lenb);
for(int i=0;i<lenc;i++){
if(a[i]<b[i]){
a[i]+=10;
a[i+1]-=1;
}
c[i]=a[i]-b[i];
}
while(c[lenc]==0&&lenc>0){
lenc--;
}
if(f==1)cout<<"-";
//4、倒序输出结果
for(int i=lenc;i>=0;i--){
cout<<c[i];
}
}
int main(){
cin>>s1>>s2;
if(s1[0]!='-'&&s2[0]!='-'){
sub(s1,s2);
}else if(s1[0]=='-'&&s2[0]=='-'){
s1.erase(0,1);
s2.erase(0,1);
sub(s2,s1);
}else if(s1[0]=='-'&&s2[0]!='-'){
s1.erase(0,1);
cout<<"-";
add(s1,s2);
}else if(s1[0]!='-'&&s2[0]=='-'){
s2.erase(0,1);
add(s1,s2);
}
return 0;
}
评论区