加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

阶乘的精确值(借鉴白书)

发布时间:2020-12-14 03:32:20 所属栏目:大数据 来源:网络整理
导读:输入不超过1000的正整数n,输出n的阶乘的精确结果 样例输入:30 样例输出:265252859812191058636308480000000 分析: 为了保存结果,需要分析1000!有多大。用计算器算一算不难知道,1000!约等于4*10^2567,因此可以用一个3000个元素的数组f保存。为方便起

输入不超过1000的正整数n,输出n的阶乘的精确结果

样例输入:30

样例输出:265252859812191058636308480000000

分析:

为了保存结果,需要分析1000!有多大。用计算器算一算不难知道,1000!约等于4*10^2567,因此可以用一个3000个元素的数组f保存。为方便起见,让f【0】保存个位,f【1】保存十位等等,,,(方便向后进位);然后逆序除零输出即可

?

白书代码:

#include<stdio.h>
#include<string.h>
const int maxn = 3000;
int f[maxn];
int main()
{
	int i,j,n;
	scanf("%d",&n);
	memset(f,sizeof(f));
	f[0]=1;
	for(i=2;i<=n;i++)
	{
        int c=0;
        for(j=0;j<maxn;j++)
        {  
			int s=f[j]*i+c;
			f[j]=s%10;
			c=s/10;
        }
	}
	for(j=maxn-1;j>=0;j--) if(f[j]) break;
	for(i=j;i>=0;i--) printf("%d",f[i]);
	printf("n");
	return 0;
}

?

自己代码:

#include <stdio.h>
#include <string.h>
#define max 3000

int a[max];
//author:YangSir
int main()
{
	int len,n,i,s,c;
	while(~scanf("%d",&n))
	{
		memset(a,sizeof(a));
		a[0]=1;
		len=1;//表示位数
		for(i=2;i<=n;i++)
		{
			c=0;//表示进位的数值
			for(j=0;j<len;j++)
			{
				s=a[j]*i+c;
				c=s/10;
				a[j]=s%10;
			}
			while(c)
			{
				a[j++]=c%10;
				c/=10;
				len++;
			}
		}
		for(i=len-1;i>=0;i--)
			printf("%d",a[i]);
		printf("n");
	}
	return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读