开高精度
2026-03-29 13:35:00
发布于:湖北
6阅读
0回复
0点赞
要考虑有负数的情况
#include<iostream>
using namespace std;
bool b_bigger_a(string a,string b){
if(a.size()==b.size()){
return b>a;
}
return b.size()>a.size();
}
bool ss(string s){
return s[0]=='-';
}
string solve1(string s,string t){
int len=max(s.size(),t.size())+1;
while(len!=s.size()) s='0'+s;
while(len!=t.size()) t='0'+t;
int a[260]={0};
for(int i=0;i<len;i++) a[i]=s[i]-'0'+t[i]-'0';
for(int i=--len;i>=0;i--){
a[i-1]+=a[i]/10;
a[i]%=10;
}
len++;
string ans;
for(int i=0;i<len;i++) ans+=char(a[i]+'0');
while(ans[0]=='0' && ans.size()>1) ans.erase(0,1);
return ans;
}
string solve2(string s,string t){
int len=max(s.size(),t.size());
while(len!=s.size()) s='0'+s;
while(len!=t.size()) t='0'+t;
int a[300]={0};
for(int i=0;i<len;i++){
a[i]=(s[i]-'0')-(t[i]-'0');
}
for(int i=--len;i>=0;i--){
if(a[i]<0){
a[i-1]--;
a[i]+=10;
}
}
len++;
string ans;
for(int i=0;i<len;i++) ans+=char(a[i]+'0');
while(ans[0]=='0' && ans.size()>1) ans.erase(0,1);
return ans;
}
int main(void){
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
string s,t;
cin>>s>>t;
if(!ss(s) && !ss(t)){
bool sign=0;
if(b_bigger_a(s,t)){
swap(s,t);
sign=1;
}
string str=solve2(s,t);
if(sign) cout<<"-";
cout<<str;
}else if(!ss(s) && ss(t)){
t.erase(0,1);
cout<<solve1(s,t);
}else if(ss(s) && !ss(t)){
s.erase(0,1);
cout<<"-"<<solve1(s,t);
}else if(ss(s) && ss(t)){
s.erase(0,1); t.erase(0,1);
bool sign=0;
if(b_bigger_a(t,s)){
swap(s,t);
sign=1;
}
string str=solve2(t,s);
if(sign) cout<<"-";
cout<<str;
}
return 0;
}
全部评论 1
最简单写法
2026-03-29 来自 湖北
0





有帮助,赞一个