我试图在C ++变量中放置一个大数字。号码是600851475143
我尝试了unsigned long long int但是错误地说它常量太大了。 然后我尝试了一个名为BigInt的bigInt库 - > http://mattmccutchen.net/bigint/
问题是我无法编译代码,因为我收到很多关于lib的错误。
对“BigInteger :: BigInteger(int)”的未定义引用< - 很多这些。
到目前为止,这是我的代码:
#include "string"
#include "iostream"
#include "bigint/NumberlikeArray.hh"
#include "bigint/BigUnsigned.hh"
#include "bigint/BigInteger.hh"
#include "bigint/BigIntegerAlgorithms.hh"
#include "bigint/BigUnsignedInABase.hh"
#include "bigint/BigIntegerUtils.hh"
using namespace std;
int main() {
//unsigned long int num = 13195;
//unsigned long long int num = 600851475143;
BigInteger num = 13195;
int divider = 2;
//num = 600851475143;
while (1) {
if ((num % divider) == 0) {
cout << divider << '\n';
num /= divider;
}
else
divider++;
if (num == 1)
break;
}
}
如果我输入较小的数字并且不使用BigInt lib,则该程序运行正常。 任何帮助将不胜感激:D
答案 0 :(得分:23)
您可以通过后缀L.来指定整数文字长度
您可以通过后缀LL指定一个整数文字长。
#include <iostream>
int main()
{
long long num = 600851475143LL;
std::cout << num;
}
答案 1 :(得分:12)
对于long long int,数字是600851475143并不是太大,但是当使用long long常量(ULL表示无符号long long int)时,需要使用LL后缀:
unsigned long long int num = 600851475143ULL;
答案 2 :(得分:3)
大整数库的Raison d'etre表示您的语言无法原生处理的整数。这意味着,你甚至不能把它写成文字。也许,该库有一种方法可以将字符串解析为一个大数字。
答案 3 :(得分:2)
在更一般的情况下,如果你不能长时间使用你的号码,并且可以使用GNU LGPL许可证(http://www.gnu.org/copyleft/lesser.html),我建议尝试使用GNU Multiprecision Library(http://gmplib.org/) 。
速度极快,用C语言编写,附带一个非常酷的C ++ - 包装库。
答案 4 :(得分:1)
是否有要连接的bigint lib或要编译的bigint.cpp?
答案 5 :(得分:1)
如果您收到bignum库的未定义引用错误,您可能没有链接它。在Unix上,你必须传递像-lbigint这样的选项。如果您使用的是IDE,则必须找到链接器设置并添加库。
至于数字,正如已经说过的那样,自然常量默认为int类型。你必须使用LL / ll来获得很长的时间。
答案 6 :(得分:1)
在这种情况下要做的第一件事是弄清楚你可以适应无符号长long的最大数字是多少。由于它是64位,最大的数字是2 ^ 64-1 = 18446744073709551615,这比你的数字大。然后你知道你做错了什么,你看看马丁约克的答案,看看如何解决它。
答案 7 :(得分:0)
试试这个。 基本上你可以拥有自己的自定义类,它使用链表来存储无限大小的数量。 (RAM是限制) 试试这个吧 https://mattmccutchen.net/bigint/
答案 8 :(得分:0)
对于此问题提出五年后,对于此图书馆遇到问题的任何人,这都是您的答案。 你不能只编译你的程序,它将无法链接一个难看的难以理解的错误! 这个库是c ++文件的集合,你应该编译成.o文件并链接。如果查看示例程序提供的make文件的输出,您将看到:
g++ -c -O2 -Wall -Wextra -pedantic BigUnsigned.cc
g++ -c -O2 -Wall -Wextra -pedantic BigInteger.cc
g++ -c -O2 -Wall -Wextra -pedantic BigIntegerAlgorithms.cc
g++ -c -O2 -Wall -Wextra -pedantic BigUnsignedInABase.cc
g++ -c -O2 -Wall -Wextra -pedantic BigIntegerUtils.cc
g++ -c -O2 -Wall -Wextra -pedantic sample.cc
g++ sample.o BigUnsigned.o BigInteger.o BigIntegerAlgorithms.o BigUnsignedInABase.o BigIntegerUtils.o -o sample
将sample
替换为您的程序名称,将这些行粘贴到makefile或脚本中,然后离开。