請用string類實現
时间: 2023-07-21 08:23:44 浏览: 39
以下是使用 string 类来实现支持负数的高精度加减乘除运算的 C++ 代码示例:
```cpp
#include <iostream>
#include <string>
using namespace std;
// 去除前导零
void trim(string& s) {
while (s.size() > 1 && s[0] == '0') s.erase(s.begin());
}
// 加法
string add(string a, string b) {
string res;
int carry = 0;
while (a.size() || b.size() || carry) {
if (a.size()) carry += a.back() - '0', a.pop_back();
if (b.size()) carry += b.back() - '0', b.pop_back();
res.push_back(carry % 10 + '0');
carry /= 10;
}
reverse(res.begin(), res.end());
return res;
}
// 减法
string sub(string a, string b) {
string res;
int carry = 0;
while (a.size() || b.size() || carry) {
if (a.size()) carry += a.back() - '0', a.pop_back();
if (b.size()) carry -= b.back() - '0', b.pop_back();
res.push_back((carry + 10) % 10 + '0');
if (carry < 0) carry = -1;
else carry = 0;
}
reverse(res.begin(), res.end());
trim(res);
return res;
}
// 乘法
string mul(string a, string b) {
string res(a.size() + b.size(), '0');
for (int i = a.size() - 1; i >= 0; i--) {
int carry = 0;
for (int j = b.size() - 1; j >= 0; j--) {
int sum = (a[i] - '0') * (b[j] - '0') + (res[i + j + 1] - '0') + carry;
carry = sum / 10;
res[i + j + 1] = sum % 10 + '0';
}
res[i] += carry;
}
trim(res);
return res;
}
// 除法
string div(string a, int b, int& r) {
string res;
r = 0;
for (int i = 0; i < a.size(); i++) {
r = r * 10 + a[i] - '0';
res.push_back(r / b + '0');
r %= b;
}
trim(res);
return res;
}
// 输出高精度数
void print(string& s) {
cout << s << endl;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
string c = add(s1, s2);
string d = sub(s1, s2);
string e = mul(s1, s2);
int r;
string f = div(s1, 3, r);
print(c);
print(d);
print(e);
print(f);
cout << r << endl;
return 0;
}
```
在这个代码中,使用了 string 类型来存储高精度数,其中 string 中的每一个字符表示高精度数的一位数字。这个代码中实现了加减乘除四种运算,其中除法的返回值是商的高精度数,而余数则通过传入一个 int& 类型的参数 r 来返回。在使用这个代码时,只需要将需要计算的高精度数转换为 string 类型,然后调用对应的函数即可。需要注意的是,在使用加法和减法时需要判断两个高精度数的符号,并根据情况选择调用 add 或 sub 函数。在输出高精度数时,需要去除前导零。