c ++ - 一个很长的整数问题

时间:2017-08-18 10:19:10

标签: c++ string

我正在尝试编写一个获得非常长的数字的程序 所以一开始我把它保存为字符串,我应该执行简单的操作符 但我不知道我应该如何存储这么长的数字来做这些事情

这是我做的, 部首:

    class BigInteger
{
private:
    string number;

public:
    BigInteger();
    BigInteger(int);
    BigInteger(const char*);
    BigInteger(const BigInteger&);
    BigInteger(const BigInteger&&);
    //~BigInteger();

    void setValue(int);
    void setValue(const char*);
    //void setValue(const BigInteger&);

    string getnum();

    static BigInteger fromString(const char*);

    const BigInteger operator+(const BigInteger&) const;
    const BigInteger operator-(const BigInteger&) const;
    const BigInteger operator*(const BigInteger&) const;
    const BigInteger operator/(const BigInteger&) const; }

主:

    #include "BigInteger.h"

using namespace std;

int main()
{
    BigInteger a("2837456897658923563425345");

    BigInteger b("23784623874623874682736478236");

    BigInteger c = a + b; 

    c /= "4237467864237846"; 

    BigInteger d = a * b - c; 

}

那是主要的以及我希望它如何运行, 在函数的实现中,我设法让所有的constractors工作,但我不知道如何构建运算符,因为没有类型可以包含那么长的数字... 我该怎么办?

2 个答案:

答案 0 :(得分:1)

只需将其保留为字符串,并使用您在学校教授的加法,减法,乘法和除法方案。还记得添加和乘以数字,而其中一个是在另一个下写的吗?基本上这是你必须实现的,因为这些算法逐位处理数字,就像你要处理字符串数字char一样。

还有一些更聪明的算法,例如如果你在网上搜索备选方案,那么你可以使用它来学习。

请参阅本维基百科文章,总结了这些基本方法:

https://en.wikipedia.org/wiki/Elementary_arithmetic

修改

按要求添加示例:假设我们要添加两个转换为字符串的数字,并将结果写为名为std::string res的变量。如果您将两个数字转换为字符串,例如"10""18",你想要添加它们,取每个字符串的最后一个字符(即数字的最右边数字 - 即0和8),加0 + 8并写入作为结果字符串的最后一个字符(即最右边的数字),然后对下一个数字(即1 + 1)执行相同操作,并将其写为下一个数字。然后是res[0] == 2res[1] == 8,因此生成的字符串为"28"

请参阅您的旧学校算法,了解如果数字位数不同或数字加法结果大于9,该怎么办。

答案 1 :(得分:0)

已针对此问题实施了库。如果您想要实现自己的代码,我可以向您建议的是将数字存储在向量中并了解一些操作算法。例如,您可能想要使用Karatsuba的乘法算法。 https://en.wikipedia.org/wiki/Karatsuba_algorithm