我遇到以下計算大型因子(數字大到100)..任何人都可以解釋我在這個算法中使用的基本思想? 我需要知道在計算階乘中實施的數學。任何人都可以解釋這個算法來計算大的因子?
#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;
}
你在哪裏遇到的算法?您應該*總是*包含這些信息以給出適當的歸屬,但也可能有助於回答問題。 – 2010-01-24 15:34:55
學校功課,不是嗎? – Francis 2010-01-24 15:37:51
如果這不是爲什麼編寫可讀代碼是一個很大的獎勵的倒數第二個例子,那麼我不知道是什麼。這段代碼不值得解釋,它值得重寫。 – 2010-01-24 16:39:02