문제

C ++ 변수에 큰 숫자를 배치하려고합니다. 숫자는 600851475143입니다

나는 서명되지 않은 긴 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

도움이 되었습니까?

해결책

접미사 L에 의해 오랫동안 정수 문자를 지정할 수 있습니다.
접미사 ll에 의해 긴 정수 문자를 지정할 수 있습니다.

#include <iostream>

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

    std::cout << num;
}

다른 팁

숫자는 600851475143이지만 긴 긴 INT에는 너무 크지 않지만 긴 긴 상수를 사용할 때는 LL 접미사를 사용해야합니다 (서명되지 않은 긴 int의 경우 ULL) :

unsigned long long int num = 600851475143ULL;

큰 정수 도서관의 Raison d 'Etre는 언어가 기본적으로 처리 할 수없는 정수를 나타냅니다. 즉, 당신은 그것을 문자 그대로 쓸 수 없습니다. 아마도 그 라이브러리는 문자열을 큰 숫자로 구문 분석 할 수있는 방법이 있습니다.

더 일반적인 경우 오랫동안 번호를 맞출 수없고 GNU LGPL 라이센스와 함께 살 수있는 경우 (http://www.gnu.org/copyleft/lesser.html), 나는 GNU Multiprecision 라이브러리를 시도하는 것이 좋습니다 (http://gmplib.org/).

C로 작성된 매우 빠르며 매우 멋진 C ++-래퍼 라이브러리가 제공됩니다.

컴파일 할 큰 LIB 또는 Bigint.cpp가 있습니까?

Bignum 라이브러리에 대한 정의되지 않은 참조 오류가 발생하면 연결하지 않았을 것입니다. 유닉스에서는 -lbigint와 같은 옵션을 통과해야합니다. IDE를 사용하는 경우 링커 설정을 찾고 라이브러리를 추가해야합니다.

이미 말했듯이 숫자는 int 유형에 대한 자연스러운 상수 기본값입니다. 오래 걸리려면 ll/ll을 사용해야합니다.

이 경우 가장 먼저해야 할 일은 서명되지 않은 장거리에 맞을 수있는 가장 큰 숫자가 무엇인지 알아내는 것입니다. 비트 64 비트이므로 가장 큰 숫자는 2^64-1 = 1844674073709551615이며 이는 숫자보다 큽니다. 그런 다음 당신은 당신이 뭔가 잘못하고 있다는 것을 알고 있으며, Martin York의 답을보고 그것을 고치는 방법을 확인합니다.

이거 한번 해봐. 기본적으로 링크 된 목록을 사용하여 무한 크기의 수를 저장하는 고유 한 사용자 정의 클래스를 가질 수 있습니다. (RAM은 제한입니다) 이것을 시도하십시오https://mattmccutchen.net/bigint/

이 질문이 질문을받은 후 5 년 후이 도서관에 문제가있는 다른 사람에게는 이것이 여러분의 답입니다. 프로그램 만 컴파일 할 수는 없으며 추악한 뚫을 수없는 오류와 연결되지 않습니다! 이 라이브러리는 .O 파일로 컴파일하고 링크를 작성 해야하는 C ++ 파일 모음입니다. 샘플 프로그램과 함께 제공된 제조업 파일의 출력을 보면 다음을 볼 수 있습니다.

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