高精度减法
本帖最后由 柿子饼同学 于 2022-5-12 22:07 编辑#include <bits/stdc++.h>
using namespace std;
string sub(string a, string b){
bool ism = 0;
int l, dl, c = 0;
if(a.size() < b.size()){
swap(a, b);
ism = 1;
}
if(a.compare(b) < 0 && a.size() == b.size()){
swap(a, b);
ism = 1;
}
l = b.size();
dl = a.size() - b.size();
for(int i = l-1; i >= 0; i--){
if(a-'0' - c < b-'0'){
ans = char(a + 10 - b - c + '0') + ans;
c = 1;
}
else{
ans = char(a - b - c + '0') + ans;
c = 0;
}
}
ans.erase(0, ans.find_first_not_of('0'));
if(!ism) ans = '-' + ans;
return ans;
}
int main(){
ios::sync_with_stdio(0);
string a, b;
cin >> a >> b;
cout << sub(a, b) << endl;
return 0;
}
我的高精减法代码如上, 不知道哪里出了问题, 求指点{:10_262:} 本帖最后由 jhq999 于 2022-5-13 08:51 编辑
#include <iostream>
#include <string>
using namespace std;
string sub(string a, string b){
bool ism = 0;
int l, dl;
if(a.size() < b.size()||(a.compare(b) < 0 && a.size() == b.size())){
swap(a, b);
ism = 1;
}
l = a.size();
dl = a.size() - b.size();
for(int i = l-1; i >= 0; i--){
//if(a<'0')a+=10,a--;
if(i>=dl)
{
if(a<b)
{
a+=10;
a--;
}
a=a-b+'0';
}
else if(a<'0')
a+=10,a--;
}
b="";
if(ism)b="-";
b+=a;
return b;
}
int main(){
ios::sync_with_stdio(0);
std::string a, b;
std::cin >> a >> b;
cout << sub(a, b) << endl;
return 0;
}
页:
[1]