高精度小数加法c++ string
时间: 2023-07-19 11:24:31 浏览: 256
以下是一个高精度小数加法的 C++ 实现,使用了字符串来存储小数,并且支持任意精度。假设输入的两个小数 a 和 b 都是非负数,且小数位数不超过 1000。
```cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string add(string a, string b) {
int lena = a.length(), lenb = b.length();
if (lena < lenb) {
swap(a, b);
swap(lena, lenb);
}
int carry = 0;
string res = "";
int p = lena - 1, q = lenb - 1;
while (q >= 0) {
int sum = a[p] - '0' + b[q] - '0' + carry;
res += to_string(sum % 10);
carry = sum / 10;
p--;
q--;
}
while (p >= 0) {
int sum = a[p] - '0' + carry;
res += to_string(sum % 10);
carry = sum / 10;
p--;
}
if (carry) {
res += to_string(carry);
}
reverse(res.begin(), res.end());
return res;
}
int main() {
string a, b;
cin >> a >> b;
string ans = add(a, b);
cout << ans << endl;
return 0;
}
```
对于输入的两个小数 a 和 b,首先比较它们的位数,将位数小的字符串交换到前面,以便后续操作。然后,从低位开始逐位相加,并记录进位 carry,最后将结果倒序输出即可。
需要注意的是,由于我们使用了字符串来存储小数,因此小数点也要考虑进去。在计算时,我们可以将小数点作为一个特殊字符来处理,例如可以将小数点替换为空字符,然后在最终结果中加上小数点即可。
阅读全文