实验任务
给出一个数 N,请你计算 N!的值。
数据输入
每个例子第一行只有一个数 N(1<=N<=1000)。
数据输出
对于每个 N,在一行里输出 N!的值。
输入示例
1
2
3
输出示例
1
2
6
解题思路
高精度问题:
其核心思想就是,把计算结果每一位数字保存到一个数组中,例如:
把256保存至数组中,保存结果应该是a[0] =6、a[1] =5、a[2] =2 然后每一位数都分别要和乘数相乘,同时还需要把前一位的进位加上。
参考代码
#include<iostream>
#define MAX 10000
using namespace std;
int main()
{
int n,a[MAX];
int i,j,k,count,temp;
while(cin>>n){
a[0] = 1;
count = 1;//当前结果的位数
for(i=1;i<=n;i++){
k = 0;
for(j=0;j<count;j++){
temp = a[j]*i+k; //结果 = a[x] * 乘数 + 进位
a[j] = temp%10; //a[x] = 结果 % 10
k = temp/10; //进位 = 结果 / 10
}
while(k){//最后可能还有进位
a[count++] = k%10;
k/=10;
}
}
for(i = count-1;i >= 0;i--)
cout << a[i];
cout << endl;
}
return 0;
}