>백엔드 개발 >C++ >외부 라이브러리 없이 임의로 큰 숫자의 계승을 어떻게 계산할 수 있습니까?

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

Susan Sarandon
Susan Sarandon원래의
2024-11-24 13:05:14708검색

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

대수의 계승 결정

결과가 기본 데이터 유형의 한계를 초과하는 경우 계승 계산이 어려워집니다. 이 기사에서는 임의의 큰 정수의 계승값을 계산하여 솔루션의 모든 자릿수를 표시하는 기술을 제시합니다.

수동 계산 시뮬레이션

GMP와 같은 외부 라이브러리가 없는 경우 , 정수 배열을 사용하여 수동 계승 계산 프로세스를 모방해야 합니다. 이 배열은 각 인덱스가 숫자를 포함하는 큰 숫자를 나타냅니다.

계수 계산 알고리즘

숫자 n의 경우 계승은 다음과 같이 계산됩니다.

  1. 배열의 각 숫자에 다음을 곱합니다. n.
  2. 올바른 캐리 처리를 사용하여 동일한 배열에 결과를 저장합니다.
  3. 1 또는 0에 도달할 때까지 n-1을 사용하여 알고리즘을 재귀적으로 호출합니다.

구현예

제공된 C 코드는 위 내용을 구현한 것입니다. 알고리즘:

#include <iostream>
#include <cstring>

int max = 5000;

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];
  }
}

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;
}

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.