比如n=3;那么就有3*2*1=6种排列,分别是123,213,132,231,321,312
请问这样的算法这么弄呢?
这个要用高精度,看我以前写的一个求 十万!的程序,或许会对你有帮助(正常的变量达不到100!那么大,会出现结果错误)
http://bbs.bc-cn.net/viewthread.php?tid=108422&extra=&page=100#
/////////////////////////////////////////////
// File Name: n!.cpp
/////////////////////////////////////////////
#include <iostream>
using namespace std;
int main()
{
int a[10001] = {0, 0};
int c, i, j, n, x;
c = 0;
a[1] = 1;
x =1 ;
cout << "Please input n:";
cin >> n;
////////////////////////////////////////////
// Main algorithm !!!!
////////////////////////////////////////////
for (i = 1; i <= n; i++)
{
for (j = 1; j <= x; j++)
{
a[j] *= i;
a[j] += c;
c = 0;
c = a[j]/10;
if (a[j]>= 10)
{
if (a[x] >= 10)
x++;
c = a[j] / 10;
a[j] %= 10;
}
}
}
////////////////////////////////////////////
// Output the answer
////////////////////////////////////////////
cout << n << "!=\n";
for(int k = x; k >= 1; k--)
cout << a[k];
cout << endl;
////////////////////////////////////////////
system("pause");
return 0;
}
/////////////////////////////////////////////
// QQ:414112390 Q群:7196588
// Cedric Porter [Stupid ET] 原創
/////////////////////////////////////////////