这写的是算N!的一个代码,大家都知道,
#include<iostream>
using namespace std;
int fun(int n)
{
if (n == 0 || n == 1)
return 1;
else
return fun(n - 1) * n;
}
int main(void)
{
int n;
while (cin >> n)
{
cout << fun(n) << endl;
}
return 0;
}
利用这个递归可以算N!,但这只能算到12!,N大于12N!将超出int 的范围。就算把 int 改为 long long 也不能算很大的N!,但如果将N!的结果用数组的形式来表示就可以解决这个问题了,下面的代码就是这样做的。
Code:
#include<iostream>
using namespace std;
int const M = 10000;//以万进制来处理进位
int main(void)
{
int a[10000];
int n;
int p;
int i, j, k;
while (cin >> n)
{
if (n == 0)
printf("1\n");
else
{
memset(a, 0, sizeof (a));
p = 0;
a[0] = 1;
for (i = 1; i <= n; i++)//开始算N!
{
for (j = 0; j < 10000; j++)//处理进位
{
a[j] = a[j] * i + p;
p = a[j] / M;
if (a[j] >= M)
a[j] %= M;
}
}
for (i = 9999; i >= 0; i--)//找最高位
{
if (a[i] != 0)
{
k = i;
break;
}
}
printf("%d", a[k]);//打印结果
for (i = k - 1; i >= 0; i--)
printf("%04d", a[i]);
printf("\n");
}
}
return 0;
}