> 백엔드 개발 > C++ > 본문

외부 라이브러리 없이 어떻게 임의로 큰 숫자의 계승을 계산하고 표시할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-11-24 21:00:16
원래의
996명이 탐색했습니다.

How Can We Calculate and Display the Factorial of Arbitrarily Large Numbers Without External Libraries?

전체 자릿수 표시를 통한 임의 큰 숫자의 팩토리얼 계산

소개:

최근 인터뷰에서 어려운 질문이 나왔습니다. 발생: 임의의 큰 숫자의 계승을 계산하는 동시에 모든 숫자를 표시합니다. GMP와 같은 외부 라이브러리는 편리한 솔루션을 제공하지만 이 작업을 위한 대체 방법을 탐색하는 것이 중요합니다. 여기서는 외부 라이브러리에 의존하지 않고 정수 배열을 활용하여 계승을 표현하는 접근 방식을 제시합니다.

방법:

  1. 배열 초기화 : 각각 한 자리 숫자를 포함하는 정수 배열을 만듭니다. 계승.
  2. 계수 계산: 배열의 요소를 오른쪽에서 왼쪽으로 반복하여 각 숫자에 주어진 숫자를 곱합니다. 넘친 부분은 다음 숫자로 이동합니다.
  3. 재귀: 계승의 각 후속 정수에 대해 2단계를 재귀적으로 반복하여 각 단계에서 입력 숫자를 줄입니다.
  4. 표시: 계승이 계산되면 배열을 왼쪽에서 오른쪽으로 반복하여 0이 아닌 각 요소를 인쇄합니다. (선행 0 무시).

구현:

#include <iostream>
#include <cstring>

int max = 5000;

// Display all non-zero digits of the array
void display(int arr[]) {
    int ctr = 0;
    for (int i = 0; i < max; i++) {
        if (!ctr && arr[i])         ctr = 1;
        if (ctr)
            std::cout << arr[i];
    }
}

// Calculate the factorial of 'n' and store it in 'arr'
void factorial(int arr[], int n) {
    if (!n) return;
    int carry = 0;
    for (int i = max - 1; i >= 0; --i) {
        arr[i] = (arr[i] * n) + carry;
        carry = arr[i] / 10;
        arr[i] %= 10;
    }
    factorial(arr, n - 1);
}

int main() {
    int *arr = new int[max];
    std::memset(arr, 0, max * sizeof(int));
    arr[max - 1] = 1;
    int num;
    std::cout << "Enter the number: ";
    std::cin >> num;
    std::cout << "Factorial of " << num << " is :\n";
    factorial(arr, num);
    display(arr);
    delete[] arr;
    return 0;
}
로그인 후 복사

설명:

이 코드는 계승을 나타내는 정수 배열 'arr'입니다. 'factorial' 함수는 계승을 재귀적으로 계산하여 'arr'에 저장합니다. 'display' 함수는 'arr'의 0이 아닌 숫자를 인쇄하여 계승의 가독성을 보장합니다.

결론:

제시된 접근 방식은 외부 라이브러리를 사용하지 않고 임의로 큰 숫자의 계승을 계산합니다. 배열 기반 표현을 활용하여 계승의 모든 자릿수를 캡처하고 이를 완벽하게 표시합니다. 이 방법은 인터뷰 요구 사항을 충족할 뿐만 아니라 프로그래밍에서 숫자 조작의 기본 원리를 이해하는 것이 중요하다는 점을 강조합니다.

위 내용은 외부 라이브러리 없이 어떻게 임의로 큰 숫자의 계승을 계산하고 표시할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿