Bagaimanakah Kita Boleh Mengira Faktor Nombor Besar Sewenang-wenangnya Tanpa Perpustakaan Luaran?

Susan Sarandon
Lepaskan: 2024-11-24 13:05:14
asal
706 orang telah melayarinya

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

Menentukan Faktor Nombor Besar

Pengiraan pemfaktoran menimbulkan cabaran apabila keputusan melebihi had jenis data asli. Artikel ini membentangkan teknik untuk mengira pemfaktoran integer yang besar secara sewenang-wenangnya, mendedahkan semua digit dalam penyelesaian.

Simulasi Pengiraan Manual

Jika tiada perpustakaan luaran seperti GMP , kita mesti meniru proses pengiraan faktorial manual menggunakan tatasusunan integer. Tatasusunan ini mewakili nombor yang besar, dengan setiap indeks memegang satu digit.

Algoritma Pengiraan Faktor

Untuk nombor n, faktorial dikira seperti berikut:

  1. Darab setiap digit dalam tatasusunan dengan n.
  2. Simpan hasilnya dalam tatasusunan yang sama, dengan pengendalian bawa yang betul.
  3. Panggil algoritma secara rekursif dengan n-1 sehingga mencapai 1 atau 0.

Contoh Pelaksanaan

Kod C yang disediakan melaksanakan algoritma di atas:

#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;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Mengira Faktor Nombor Besar Sewenang-wenangnya Tanpa Perpustakaan Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan