我正在尝试编写一个获得非常长的数字的程序 所以一开始我把它保存为字符串,我应该执行简单的操作符 但我不知道我应该如何存储这么长的数字来做这些事情
这是我做的, 部首:
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工作,但我不知道如何构建运算符,因为没有类型可以包含那么长的数字... 我该怎么办?
答案 0 :(得分:1)
只需将其保留为字符串,并使用您在学校教授的加法,减法,乘法和除法方案。还记得添加和乘以数字,而其中一个是在另一个下写的吗?基本上这是你必须实现的,因为这些算法逐位处理数字,就像你要处理字符串数字char一样。
还有一些更聪明的算法,例如如果你在网上搜索备选方案,那么你可以使用它来学习。
请参阅本维基百科文章,总结了这些基本方法:
https://en.wikipedia.org/wiki/Elementary_arithmetic
修改强>
按要求添加示例:假设我们要添加两个转换为字符串的数字,并将结果写为名为std::string res
的变量。如果您将两个数字转换为字符串,例如"10"
和"18"
,你想要添加它们,取每个字符串的最后一个字符(即数字的最右边数字 - 即0和8),加0 + 8并写入作为结果字符串的最后一个字符(即最右边的数字),然后对下一个数字(即1 + 1)执行相同操作,并将其写为下一个数字。然后是res[0] == 2
和res[1] == 8
,因此生成的字符串为"28"
。
请参阅您的旧学校算法,了解如果数字位数不同或数字加法结果大于9,该怎么办。
答案 1 :(得分:0)
已针对此问题实施了库。如果您想要实现自己的代码,我可以向您建议的是将数字存储在向量中并了解一些操作算法。例如,您可能想要使用Karatsuba的乘法算法。 https://en.wikipedia.org/wiki/Karatsuba_algorithm