tôi đi qua chương trình sau đây để tính toán giai thừa lớn (số lượng lớn như 100) .. bất cứ ai có thể giải thích cho tôi những ý tưởng cơ bản được sử dụng trong thuật toán này ?? Tôi chỉ cần biết toán học được thực hiện để tính giai thừa.Bất cứ ai có thể giải thích thuật toán này để tính toán giai thừa lớn?
#include <cmath>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
unsigned int d;
unsigned char *a;
unsigned int j, n, q, z, t;
int i,arr[101],f;
double p;
cin>>n;
p = 0.0;
for(j = 2; j <= n; j++)
p += log10(j);
d = (int)p + 1;
a = new unsigned char[d];
for (i = 1; i < d; i++)
a[i] = 0; //initialize
a[0] = 1;
p = 0.0;
for (j = 2; j <= n; j++)
{
q = 0;
p += log10(j);
z = (int)p + 1;
for (i = 0; i <= z/*NUMDIGITS*/; i++)
{
t = (a[i] * j) + q;
q = (t/10);
a[i] = (char)(t % 10);
}
}
for(i = d -1; i >= 0; i--)
cout << (int)a[i];
cout<<"\n";
delete []a;
return 0;
}
Nơi mà bạn đã đi qua các thuật toán? Bạn nên * luôn luôn * bao gồm thông tin này để cung cấp cho phân bổ phù hợp, nhưng nó cũng có thể hữu ích trong việc trả lời câu hỏi. –
bài tập ở nhà, phải không? – Francis
Nếu đây không phải là ví dụ điển hình về lý do tại sao viết mã có thể đọc được là một phần thưởng lớn, thì tôi không biết là gì. Mã này không xứng đáng với một lời giải thích, nó xứng đáng được viết lại. –