码迷,mamicode.com
首页 > 其他好文 > 详细

阶乘的精确性

时间:2017-02-11 18:56:26      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:std   bre   ems   while   namespace   string   mem   数组   turn   

/*
输入不超过1000的正整数n,输出n!=1*2*3*……*n的精确结果。
样例输入:30
样例输出:265252859812191058636308480000000
例如 n=3;s=6;
n=4;s=24;
n=5;s=120;
1000的阶乘需要一个3000位的数组来存
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

const int maxn=3003;//数组长度
int f[maxn];
int main()
{
int i,j,n,c,k;

while(cin>>n)
{
memset(f,0,sizeof(f));//清空数组
f[0]=1;

for(i=2;i<=n;i++)
{
c=0;
for(j=0;j<maxn;j++)
{
k=f[j]*i+c;
f[j]=k%10;
c=k/10;
}
}
for(j=maxn-1;j>=0;j--)
if(f[j]!=0)//利用0 1 来判断;
break;
for(i=j;i>=0;i--)
printf("%d",f[i]);
printf("\n");
}
return 0;
}

 

阶乘的精确性

标签:std   bre   ems   while   namespace   string   mem   数组   turn   

原文地址:http://www.cnblogs.com/hhkobeww/p/6389519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!