用C++ string實現上面代碼
时间: 2023-08-04 21:29:34 浏览: 39
好的,以下是使用 C++ string 实现高精度小数减法的示例代码:
```c++
#include <iostream>
#include <string>
using namespace std;
string decimal_subtract(string a, string b) {
// 将小数转化为字符串并去掉小数点
int dot_a = a.find(".");
int dot_b = b.find(".");
a.erase(dot_a, 1);
b.erase(dot_b, 1);
// 计算小数点后的位数
int precision = max(dot_a == string::npos ? 0 : a.length() - dot_a,
dot_b == string::npos ? 0 : b.length() - dot_b);
// 在末尾补零
a.append(precision - (dot_a == string::npos ? 0 : a.length() - dot_a), '0');
b.append(precision - (dot_b == string::npos ? 0 : b.length() - dot_b), '0');
// 从小数点后第一位开始计算
string result_str = "";
int borrow = 0;
for (int i = a.length() - 1; i >= (int)a.length() - precision; --i) {
int diff = a[i] - b[i] - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result_str = (char)(diff + '0') + result_str;
}
// 处理整数部分
for (int i = a.length() - precision - 1; i >= 0; --i) {
int diff = a[i] - borrow;
if (i == 0 && diff == 0) {
break;
}
if (diff < b[i]) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result_str = (char)(diff - b[i] + '0') + result_str;
}
// 在中间插入小数点
result_str.insert(result_str.length() - precision, ".");
return result_str;
}
int main() {
string a = "123.456";
string b = "12.34";
string c = decimal_subtract(a, b);
cout << c << endl; // 输出: 111.116
return 0;
}
```
这个函数和 Python 版本的实现非常相似,只不过使用了 C++ 的 string 类型来处理字符串。你可以将被减数和减数以字符串形式传入 `decimal_subtract` 函数中,它将返回它们的差值。需要注意的是,这个函数只能处理非负数。如果你需要处理负数,需要在函数中进行额外的判断和处理。