输入不超过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 3000
int 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;
}
精确算出n的阶乘
最新推荐文章于 2020-03-13 21:03:52 发布