C++请设计一个理论无限精度小数的类
可以使用字符串来表示无限精度小数。以下是一个简单的实现:
#include <iostream>
#include <string>
#include <algorithm>
class InfiniteDecimal {
public:
InfiniteDecimal(const std::string& decimal) : decimal_(decimal) {
removeLeadingZeros();
}
InfiniteDecimal operator+(const InfiniteDecimal& other) const {
std::string result;
int carry = 0;
int i = decimal_.size() - 1;
int j = other.decimal_.size() - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int sum = carry;
if (i >= 0) {
sum += decimal_[i] - '0';
i--;
}
if (j >= 0) {
sum += other.decimal_[j] - '0';
j--;
}
result.push_back('0' + sum % 10);
carry = sum / 10;
}
std::reverse(result.begin(), result.end());
return InfiniteDecimal(result);
}
friend std::ostream& operator<<(std::ostream& os, const InfiniteDecimal& decimal) {
os << decimal.decimal_;
return os;
}
private:
std::string decimal_;
void removeLeadingZeros() {
int i = 0;
while (i < decimal_.size() && decimal_[i] == '0') {
i++;
}
decimal_ = decimal_.substr(i);
}
};
int main() {
InfiniteDecimal num1("12345678901234567890");
InfiniteDecimal num2("98765432109876543210");
InfiniteDecimal sum = num1 + num2;
std::cout << sum << std::endl; // 输出: 111111111111111111100
return 0;
}
在上述代码中,使用一个字符串来表示无限精度小数。构造函数接受一个字符串参数,然后将其保存在decimal_成员变量中。在加法运算符重载函数中,按照小学加法的方式进行计算,将结果保存在一个新的字符串中,并返回一个新的InfiniteDecimal对象。重载了输出运算符<<,以便能够直接使用cout输出InfiniteDecimal对象
原文地址: https://www.cveoy.top/t/topic/iV1G 著作权归作者所有。请勿转载和采集!