我试图在C ++变量中放置一个大数字。号码是600851475143

我尝试了unsigned long long int但是错误地说它常量太大了。 然后我尝试了一个名为BigInt的bigInt库 - <!> gt; http://mattmccutchen.net/bigint/

问题是我无法编译代码,因为我收到很多关于lib的错误。

对“BigInteger :: BigInteger(int)”的未定义引用<!> lt; - 很多这些。

到目前为止,这是我的代码:

#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

有帮助吗?

解决方案

您可以通过后缀L.
指定整数文字 您可以通过后缀LL指定整数文字长。

#include <iostream>

int main()
{
    long long num = 600851475143LL;

    std::cout << num;
}

其他提示

对于long long int,数字是600851475143并不是太大,但是当使用long long常量(ULL表示无符号long long int)时,需要使用LL后缀:

unsigned long long int num = 600851475143ULL;

大整数库的Raison d'etre表示您的语言无法原生处理的整数。这意味着,你甚至不能把它写成文字。也许,该库有一种方法可以将字符串解析为一个大数字。

在更一般的情况下,如果您无法长时间使用您的号码,并且可以使用GNU LGPL许可证( http://www.gnu.org/copyleft/lesser.html ),我建议尝试使用GNU Multiprecision Library( http://gmplib.org/ )。

速度极快,用C语言编写,附带一个非常酷的C ++ - 包装库。

是否有要连接的bigint lib或要编译的bigint.cpp?

如果您收到bignum库的未定义引用错误,您可能没有链接它。在Unix上,你必须传递像-lbigint这样的选项。如果您使用的是IDE,则必须找到链接器设置并添加库。

至于数字,正如已经说过的那样,自然常量默认为int类型。你必须使用LL / ll来获得很长的时间。

在这种情况下要做的第一件事是弄清楚你可以适应无符号长long的最大数字是多少。由于它是64位,最大的数字是2 ^ 64-1 = 18446744073709551615,这比你的数字大。然后你知道你做错了什么,你看看马丁约克的答案,看看如何解决它。

试试这个。 基本上你可以拥有自己的自定义类,它使用链表来存储无限大小的数量。 (RAM是限制) 试试这个吧 https://mattmccutchen.net/bigint/

对于此问题提出五年后,对于此图书馆遇到问题的任何人,这都是您的答案。 你不能只编译你的程序,它将无法链接一个难看的难以理解的错误! 这个库是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或脚本中,然后离开。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top