Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Kita Boleh Mengira dan Memaparkan Faktor Nombor Besar Sewenang-wenangnya Tanpa Perpustakaan Luaran?

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

Patricia Arquette
Patricia Arquetteasal
2024-11-24 21:00:16997semak imbas

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

Pengiraan Faktor Nombor Besar Sewenang-wenangnya dengan Paparan Digit Penuh

Pengenalan:

Dalam temu bual baru-baru ini, soalan yang mencabar timbul: mengira faktorial nombor yang besar secara sewenang-wenangnya sambil memaparkan semua digit. Walaupun perpustakaan luaran seperti GMP menawarkan penyelesaian yang mudah, adalah penting untuk meneroka kaedah alternatif untuk tugas ini. Di sini, kami membentangkan pendekatan yang menggunakan tatasusunan integer untuk mewakili faktorial tanpa bergantung pada perpustakaan luaran.

Kaedah:

  1. Permulaan Tatasusunan : Cipta tatasusunan integer, masing-masing memegang satu digit faktorial.
  2. Pengiraan Faktor: Lelaran ke atas elemen tatasusunan dari kanan ke kiri, mendarab setiap digit dengan nombor yang diberi. Bawa sebarang limpahan ke digit seterusnya.
  3. Rekursi: Ulang langkah 2 secara rekursif untuk setiap integer seterusnya bagi faktorial, mengurangkan nombor input dalam setiap langkah.
  4. Paparan: Setelah pemfaktoran telah dikira, ulangi tatasusunan dari kiri ke kanan, mencetak setiap elemen bukan sifar (mengabaikan sifar pendahuluan).

Pelaksanaan:

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

Penjelasan:

Kod ini menggunakan tatasusunan integer 'arr' untuk mewakili faktorial. Fungsi 'faktorial' secara rekursif mengira faktorial dan menyimpannya dalam 'arr'. Fungsi 'paparan' mencetak digit bukan sifar 'arr', memastikan kebolehbacaan faktorial.

Kesimpulan:

Pendekatan yang dibentangkan menunjukkan kaedah untuk mengira faktorial bagi nombor yang besar secara sewenang-wenangnya tanpa menggunakan perpustakaan luar. Ia menggunakan perwakilan berasaskan tatasusunan untuk menangkap semua digit faktorial dan memaparkannya dalam kemuliaan penuhnya. Kaedah ini bukan sahaja memenuhi keperluan temu duga tetapi juga menekankan kepentingan memahami prinsip asas manipulasi nombor dalam pengaturcaraan.

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

Kenyataan:
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