팩토리얼을 다루는 동안 큰 정수 문제

Dasty Dustleg

다음 코드에는 해결할 수없는 문제가 있습니다.

#include <stdio.h>
#include <stdlib.h>

int factorial(long long int x) {
    long long int temp;
    temp = x - 1;

    for (; temp > 0; temp--) {
        x = x * temp;
    }
    return x;
}

int main() {
    long long int x, fact;

    while (1) {
        printf("Please enter the number that you want to learn factoriel...\n(To quit press ctrl+c)\n");
        scanf("%lld", &x);

        if (x == EOF) {
            break;
        }

        if (x >= 0) {
            fact = factorial(x);
            printf("Factorial of %lld is %lld\n", x, fact);
        } else {
            fact = 0;
            printf("Factorial of %lld is %lld\n", x, fact);
        }
    }

    printf("The Program has successfully terminated...\n");
    return 0;
}

우선, 17까지 작동하지만 17에서 결과적으로 음수 무리를 제공하고 나중에 몇 개의 숫자를 결과로 0을 제공합니다

이 문제를 어떻게 해결합니까?

호세

문제는 변수가 오버플로된다는 것입니다. 즉 sizeof(variable), 숫자를 저장하기 위해 바이트가 예약되어 있지만 숫자는 예약 된 것보다 더 많은 바이트가 필요합니다.

uint32_t는 0에서 2 ^ 32 = 4,294,967,296의 범위를 제공하므로 다른 정수 유형과 동일하게 숫자 5000000000을 (올바르게) 저장할 수 없습니다.

몇 가지 선택 사항이 있습니다.

가격은 첫 번째 (상황에 따라 두 번째)를 제외하고 모든 옵션이 CPU 소비를 증가 시킨다는 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

매우 큰 팩토리얼을 사용하는 임의 정밀도 산술

분류에서Dev

C progr. -문장에서 회 문의 수 찾기-계산을 수행하는 동안 단어를 토큰 화하는 루프를 설정하는 방법

분류에서Dev

쿼리 문자열로 계정 활성화 토큰을 전달하는 동안 오류 HTTP 404.11

분류에서Dev

제곱 팩토리얼 (n!) ^ 2 == (1 * ... * n) ^ 2에서 양의 정수 n을 계산하는 함수 squarefact :: Int-> Int를 정의합니다.

분류에서Dev

ssh를 수행하는 동안 디렉토리 변경 문제

분류에서Dev

Apple iOS 튜토리얼 : UIButton addTarget을 작동시키는 문제

분류에서Dev

C ++에서 N 팩토리얼 컴파일 시간을 수행하는 3 가지 / 동일한 방법

분류에서Dev

Karate Framework에서 정렬을 수행하는 동안 def 변수 문제

분류에서Dev

다음 문자열 40 println "Hello", (5 + 6-4)를 토큰 화하는 동안 "-4"는 개별 토큰이 아닌 단일 토큰을 표시합니다.

분류에서Dev

JavaScript 팩토리얼을 시도하는 데 어떤 문제가 있습니까?

분류에서Dev

Cygwin에서 ssh 설정을 수행하는 동안 권한 문제

분류에서Dev

잘못된 포인터 : 토큰을 구문 분석하는 동안 표현식을 평가할 수 없습니다.

분류에서Dev

QML 신호 매개 변수 유형을 정의하는 동안 예기치 않은 토큰`: '

분류에서Dev

JSON을 구문 분석하는 동안 예상치 못한 토큰

분류에서Dev

Pandas로 큰 txt 파일을 구문 분석하는 동안 ParserError

분류에서Dev

AppIdentityError : Bearer 토큰을 확인하는 동안 잘못된 수신자

분류에서Dev

Autograder 사양은 큰 문제의 오류 출력을 제공하지만 수동으로 작동합니다.

분류에서Dev

수정 된 토큰을 문자열에 추가하는 Java

분류에서Dev

Yodlee에 계정을 추가하는 동안 MFA 관련 문제

분류에서Dev

PHP-내 SQL 쿼리를 수행하는 동안 문제

분류에서Dev

보안 토큰 서비스에서받은 토큰을 처리하는 동안 WCF 오류

분류에서Dev

setData () 함수에 배열을 전달하는 동안 문제

분류에서Dev

SFTP 출력을 변수로 캡처하는 동안 문제

분류에서Dev

팩토리얼 For 루프는 최대 12 개까지만 작동합니다.

분류에서Dev

'|'로 토큰을 구문 분석하는 동안 형식 예외가 발생했습니다. jsonDecode ()에서

분류에서Dev

c의 strtok () 함수를 사용하여 하위 토큰에서 토큰을 추출하는 문제

분류에서Dev

Anguar2 라우터를 사용하는 동안 제거되는 JWT 토큰

분류에서Dev

Amazon.AspNetCore.Identity.Cognito를 사용하는 동안 ConfirmEmailAsync (TUser 사용자, 문자열 토큰) NullReferenceException을 해결할 수있는 방법이 있습니까?

분류에서Dev

파일을 이동하는 동안 예기치 않은 토큰 '('근처의 구문 오류

Related 관련 기사

  1. 1

    매우 큰 팩토리얼을 사용하는 임의 정밀도 산술

  2. 2

    C progr. -문장에서 회 문의 수 찾기-계산을 수행하는 동안 단어를 토큰 화하는 루프를 설정하는 방법

  3. 3

    쿼리 문자열로 계정 활성화 토큰을 전달하는 동안 오류 HTTP 404.11

  4. 4

    제곱 팩토리얼 (n!) ^ 2 == (1 * ... * n) ^ 2에서 양의 정수 n을 계산하는 함수 squarefact :: Int-> Int를 정의합니다.

  5. 5

    ssh를 수행하는 동안 디렉토리 변경 문제

  6. 6

    Apple iOS 튜토리얼 : UIButton addTarget을 작동시키는 문제

  7. 7

    C ++에서 N 팩토리얼 컴파일 시간을 수행하는 3 가지 / 동일한 방법

  8. 8

    Karate Framework에서 정렬을 수행하는 동안 def 변수 문제

  9. 9

    다음 문자열 40 println "Hello", (5 + 6-4)를 토큰 화하는 동안 "-4"는 개별 토큰이 아닌 단일 토큰을 표시합니다.

  10. 10

    JavaScript 팩토리얼을 시도하는 데 어떤 문제가 있습니까?

  11. 11

    Cygwin에서 ssh 설정을 수행하는 동안 권한 문제

  12. 12

    잘못된 포인터 : 토큰을 구문 분석하는 동안 표현식을 평가할 수 없습니다.

  13. 13

    QML 신호 매개 변수 유형을 정의하는 동안 예기치 않은 토큰`: '

  14. 14

    JSON을 구문 분석하는 동안 예상치 못한 토큰

  15. 15

    Pandas로 큰 txt 파일을 구문 분석하는 동안 ParserError

  16. 16

    AppIdentityError : Bearer 토큰을 확인하는 동안 잘못된 수신자

  17. 17

    Autograder 사양은 큰 문제의 오류 출력을 제공하지만 수동으로 작동합니다.

  18. 18

    수정 된 토큰을 문자열에 추가하는 Java

  19. 19

    Yodlee에 계정을 추가하는 동안 MFA 관련 문제

  20. 20

    PHP-내 SQL 쿼리를 수행하는 동안 문제

  21. 21

    보안 토큰 서비스에서받은 토큰을 처리하는 동안 WCF 오류

  22. 22

    setData () 함수에 배열을 전달하는 동안 문제

  23. 23

    SFTP 출력을 변수로 캡처하는 동안 문제

  24. 24

    팩토리얼 For 루프는 최대 12 개까지만 작동합니다.

  25. 25

    '|'로 토큰을 구문 분석하는 동안 형식 예외가 발생했습니다. jsonDecode ()에서

  26. 26

    c의 strtok () 함수를 사용하여 하위 토큰에서 토큰을 추출하는 문제

  27. 27

    Anguar2 라우터를 사용하는 동안 제거되는 JWT 토큰

  28. 28

    Amazon.AspNetCore.Identity.Cognito를 사용하는 동안 ConfirmEmailAsync (TUser 사용자, 문자열 토큰) NullReferenceException을 해결할 수있는 방법이 있습니까?

  29. 29

    파일을 이동하는 동안 예기치 않은 토큰 '('근처의 구문 오류

뜨겁다태그

보관