大数运算(7)——大数阶乘(求阶乘)

大数运算(7)——大数阶乘(求阶乘)对于大数来说,一个数的阶乘是非常大的,同样,一个int类型的整数,他的阶乘就有可能会很大。就拿50来说,他的阶乘位数是65位,就已经远远超过了longlongint类型的最大值。这时候,我们要通过字符串的方法,来进行阶乘的运算。当然,需要注意的是:我们所求一个数的阶乘,这个数是在int范围内的,5000的阶乘位数是16326位。其方法是:首先,我们是可以先求一定范围内的最大

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

对于大数来说,一个数的阶乘是非常大的,同样,一个int类型的整数,他的阶乘就有可能会很大。

就拿50来说,他的阶乘位数是65位,就已经远远超过了long long int类型的最大值。这时候,我们要通过字符串的方法,来进行阶乘的运算。

当然,需要注意的是:

我们所求一个数的阶乘,这个数是在int范围内的,5000的阶乘位数是16326位。

其方法是:

首先,我们是可以先求一定范围内的最大值的阶乘位数,以便于申请数组空间的确定。

对于大数问题,我们要有将大数与数组结合的思想,可以利用类似于人工求值的方法求出有关大数的问题。

对于大数阶乘来说,最重要的是如何将每个数的每位数与相对应的数组元素储存起来,就如算50的阶乘,我们要先从1开始乘:

1*2=2,将2存到a[0]中,

接下来是用a[0]*3;

    2*3=6,将6储存在a[0]中,

接下来是用a[0]*4;

    6*4=24,是两位数,那么24%10==4存到a[0]中,24/10==2存到a[1]中,

接下来是用a[0]*5;a[1]*5+num(如果前一位相乘结果位数是两位数,那么num就等于十位上的那个数字;如果是一位数,num==0)

    24*5=120,是三位数,那么120%10==0存到a[0]中,120/10%10==2存到a[1]中,120/100==1存到a[2]中,

接下来是用a[0]*3;a[1]*6+num;a[2]*6+num;

    120*6=720,那么720%10==0存到a[0]中,720/10%10==2存到a[1]中,720/100==7存到a[2]中,

……………….

直到乘到50,将每一位数储存为止。

下面是C语言代码实现:

#include <stdio.h>
int main()
{
	int a[20001];//储存每一位所得到的数 
	int temp,digit,n,i,j=0;//temp每次的得数   digit每次得数的位数  
	scanf("%d",&n);
	a[0]=1;//从1开始乘 
	digit=1;//位数从第一位开始 
	for(i=2;i<=n;i++)
	{
		int num=0;
		for(j=0;j<digit;j++) 
		{
			temp=a[j]*i+num;//将一个数的每一位数都分别乘以i, 
			a[j]=temp%10;//将一个数的每一位数利用数组进行储存
			num=temp/10;
		}
		while(num)//判断退出循环后,num的值是否为0 
		{
			a[digit]=num%10;//继续储存 
			num=num/10;
			digit++;
		}
	}
	for(i=digit-1;i>=0;i--)//倒序输出每一位 
		printf("%d",a[i]);
	printf("\n");
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185252.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月6日 下午5:00
下一篇 2022年10月6日 下午5:00


相关推荐

  • python输入矩阵

    python输入矩阵python 常见数组元素操作 a 1 2 3 将数组元素由 str 转换成 int int x forxina 输出效果 1 2 3 将数组外的引号去除如 a 1 2 3 b 1 2 3 4 5 6 eval a 输出效果 1 2 3 eval b 输出效果 1 2 3 4 5 6 Python 输入

    2026年3月17日
    2
  • 智能体(Agent)科普:你的数字同事,比你想得更“聪明”

    智能体(Agent)科普:你的数字同事,比你想得更“聪明”

    2026年3月16日
    2
  • 最火编程语言排行榜

    最火编程语言排行榜IEEESpectrum 发布了 2021 年编程语言排行榜 官方的标题是 Python 在新技术领域依然是主导地位 Python 近几年随着大数据 数据挖掘 人工智能等领域的发展 越来越受到大家的青睐 由于 Python 上手学习比较简单 除了很多专业的开发人员学习外 非专业的数据处理人员也开始慢慢的接触 Python 从 2018 年开始 Python 的关注度就在快速攀升 并且获得了 TIOBE 的 2018 与 2020 年的年度编程语言 国内关注度 参考了百度指数 也是逐年攀升 IE

    2026年3月17日
    2
  • anycast RP「建议收藏」

    anycast RP「建议收藏」动态RP尽管较静态RP有一定的优点,但依旧存在缺陷,当选定了RP后,所有的流量仅仅依靠这一个RP转发组播数据流量,不能实现流量负载功能。anycastRP场景:为了增强PIM-SM中RP节点的可靠性,以及对网络中的组播流量进行分担,可在网络中选取若干RP点,运行AnycastRP,达到冗余备份,负载分担的目的。原理:多个RP配置一个相同的AnycastRP地址…

    2022年5月24日
    45
  • 尝试HTML + JavaScript 编写Windows App

    尝试HTML + JavaScript 编写Windows App

    2022年3月12日
    49
  • git客户端添加远程地址_git添加远程仓库地址remote

    git客户端添加远程地址_git添加远程仓库地址remote使用 git 并在 gitlab 上操作项目的小伙伴 对下列截图应该都很熟悉 如果仔细看的话 一 Gitglobalset 是全局设置用户名注意 gitconfig 命令的 global 参数 用了这个参数 表示你这台机器上所有的 Git 仓库都会使用这个配置 当然也可以对某个仓库指定不同的用户名和 Email 地址 二 Createanewre 创建一个新项目 尚没有项目代码注意

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号