N!(高精度计算)

来源:互联网 发布:苏州大学网络计费系统 编辑:程序博客网 时间:2024/04/30 05:39

实验任务

给出一个数 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 10000using 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;}
0 0