可以使用字符串来表示无限精度小数。以下是一个简单的实现:

#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对象

C++请设计一个理论无限精度小数的类

原文地址: https://www.cveoy.top/t/topic/iV1G 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录