精确算出n的阶乘

来源:互联网 发布:普通话翻译四川话软件 编辑:程序博客网 时间:2024/05/17 07:34

输入不超过1000的正整数n,输出n!=1*2*3.。。。n的精确结果。

样例:30

输出:265252859812191058636308480000000

分析:由于直接算肯定会超出整数的表示范围,所以要利用其存储在字符串中,由于1000!=4*10的2567次方,需要大概最大3000个数组就可以保存。再将数组中的数转存到string中输出。

代码:

#include <iostream>#include <string>#include <stdlib.h>#include <sstream>using namespace std;#define MAXNUM 3000int f[MAXNUM];string fn(int N){memset(f,0,sizeof(f));f[0]=1;for (int i=2;i<=N;i++){int c=0;for (int j=0;j<MAXNUM;j++){int s=f[j]*i+c;f[j]=s%10;c=s/10;}}for (int k=MAXNUM-1;k>=0;k--){if (f[k]){break;}}string ret;for (int m=k;m>=0;m--){string temp;stringstream ss;ss<<f[m];ss>>temp;ret+=temp;}return ret;}int main(){string ret=fn(30);cout<<ret<<endl;return 0;}


原创粉丝点击