编写思路 :
由于超过long long范围的实数无法在计算机上进行运算 ,但是可以用数组来存放每个单个数字,用数组来模拟人脑进行高精度减法。
将两个字符串型的数相减,得到的结果仍然用字符串数组来存放。这样做的好处就是可以把函数接口反复调用来实现多次高精度减法计算。
话不多说,下面直接上码上注释!
c++写法 :
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//高精度减法核心代码
string subtract(string num1, string num2) {
bool is_negative = false;
int len1 = num1.size(), len2 = num2.size();
if (len1 < len2) {
swap(num1, num2);
swap(len1, len2);
is_negative = true;
}
int carry = 0;
string res = "";
for (int i = 0; i < len1; i++) {
int x = num1[len1 - 1 - i] - '0';
int y = i < len2 ? num2[len2 - 1 - i] - '0' : 0;
int diff = x - y - carry;
if (diff < 0) {
diff += 10;
carry = 1;
} else {
carry = 0;
}
res += to_string(diff);
}
reverse(res.begin(), res.end());
while (res.length() > 1 && res[0] == '0')
res.erase(0, 1);
if (carry == 1) {
is_negative = true;
res = subtract(num2, num1);
}
if (is_negative) {
cout << "-";
}
return res;
}
int main() {
string a,b;
cin>>a>>b;
cout << subtract(a,b) << endl;
return 0;
}
初级小白(在校生)整理以用作学习,若有错误,还望指正,共勉!
初次书写,若存在侵权或其他问题,定立即改正,还望海涵。