问题描述
输入一个正整数n,输出n!的值。
其中n!=123*…*n。
算法描述
n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入格式
输入包含一个正整数n,n<=1000。
输出格式
输出n!的准确值。
样例输入
10
样例输出
3628800
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
int N;
cin >> N;
if (N <= 0)
return 0;
int t = 0, j;
char a[999999] = { '1' };
for (int i = 1; i <= N; i++) //从1乘到N
{
for (j = 0; j < strlen(a); j++)
{
int z = a[j];
a[j] = ((a[j] - '0')*i + t)%10+'0';
t = ((z - '0')*i + t) / 10;
}
if (t)
{
while(t != 0)
{
a[j] = t%10 + '0';
a[j + 1] = '\0';
t = t / 10;
j++;
}
}
}
for (j = (strlen(a)-1); j >=0; j--)
cout << a[j];
cout << endl;
system("pause");
return 0;
}