文档章节

大数运算之大数阶乘

o
 osc_gu9d45li
发布于 2019/04/07 18:48
字数 365
阅读 13
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

阶乘会使得位数增长的非常快,比如20!的值的位数就已经要突破long long的上限了。所以常规的做法是处理不了的,要通过数组的方式来处理。当然这个数字本身不能超过int的范围,并且要提前预估这个数字的阶乘会有多少位。

以计算5的阶乘为例,来说明这个算法:

STEP1
初始化array[0] = 1

STEP2
从2开始乘,1*2 = 2,结果只有1位数,直接存到array[0]

STEP3
2*3 = 6,结果只有1位数,直接存到array[0]

STEP4
6*4 = 24,结果有2位数,2存到array[1],4存到array[0]

STEP5
24*4 = 120,结果有3位数,1存到array[2],2存到array[1],0存到array[0]

代码实现:

#include<bits/stdc++.h>
using namespace std;
#define MAXLENGTH 50000
int main()
{
	int n;
	while(cin >> n)
	{
		int* array = NULL;
		array = (int*)malloc(MAXLENGTH*sizeof(int));
		if(!array)
		{
			cout << "malloc failed" << endl;
			break;	
		} 
		else
		{
			array[0] = 1;
			int digit = 1;//位数,随着计算不断更新 
			for(int i = 2;i <= n;i++)
			{
				int temp;
				int carry = 0;//进位 
				for(int j = 0;j < digit;j++)//将一个数每一位都乘以i 
				{
					temp = array[j]*i+carry;
					array[j] = temp%10;//将一个数的每一位拆开存放到数组的每一位 
					carry = temp/10;
				}
				while(carry)
				{
					array[digit] = carry%10;
					carry /= 10;
					digit++;
				}
			}
			while(digit >= 1) cout << array[--digit];//逆序输出 
			cout << endl;
		}
		free(array);
	}
	return 0;
} 
 

以上的代码计算10000的阶乘没有问题

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Swing界面分析和调试工具--Swing Inspector

Swing Inspector是一个Java Swing/AWT用户界面分析和调试工具,功能与firebug类似,具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从java swing初级到高级的所有开发人员,能够快速...

匿名
2013/03/06
3.4K
0
CSS 选择器--Q.js

1, 和Sizzle的兼容 Q(expr, context, result, seed) Q.matches 支持Sizzle特别的setFilter伪类如:even,:first,:last,:lt... 支持复杂的:not和:has选择器(和sizzle一样) 2, 结果的正确性 Si...

hackwaly
2012/10/23
4.6K
0
性能优化工具--Starfish

Starfish 是一个用于大数据分析的自调优系统,这是一托管 Github 上的项目,但目前访问是 404,不清楚为何。Starfish 相当于是一个性能优化工具,可让 Hadoop 用户和应用达到最佳性能,包含三...

匿名
2012/11/24
740
0
理解Swift中Optional类型-有和无的哲学

原文连接:http://blog.barat.cc/ios/understanding-swift-optional/ nil的遗憾 当某个变量或表达式没有任何内容时,在Objective-C中可以使用来表示。在Objective-C中是一个「野孩子」,voi...

巴拉迪维
2015/11/19
1.8K
9
Supporting Python 3(支持python3)——为Python 3做准备

为Python3作准备 在开始添加Python 3的支持前,为了能够尽可能地顺利过度到Python 3,你应该通过修改对2to3来说很难苦的东西来给你的代码做一些准备。即使你现在不打算迁移到Python 3,有一些...

在湖闻樟
2015/09/15
1.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

SQL 语句大全

点击上方“掌上编程”,选择“置顶或者星标” 优质文章第一时间送达! 一、基础 「1、说明:创建数据库」 CREATE DATABASE database-name    「2、说明:删除数据库」 drop database ...

GeneralMa
昨天
0
0
山东创睦网络科技有限公司:使用Python爬取全球新冠肺炎疫情数据

使用Python爬取全球新冠肺炎疫情数据 导入所需库包 获取实时数据的url 正式编写程序 查看输出结果 导入所需库包 在获取数据之前,我们需要先安装好所需的包requests和pandas: 1.如果是使用p...

osc_qv1fwke0
10分钟前
0
0
如何1年获得别人3年的工作经验(深度好文)

最近有同学问我,为什么你的工作年限不长,技术却这么厉害,我笑了笑,啥也没说。 我不是不想回答,是不知道怎么回答。在他们的定位可能就是,每方面都懂一点,遇到问题能够快速解决,就是比...

zhang_rick
今天
0
0
新基建带动行业

什么是“新基建”? 什么是“新基建”? 根据央视发布的信息来看,其涵盖了5G基站建设、新能源汽车充电桩、大数据中心、人工智能、工业互联网,特高压,城际以及城轨交通,涉及了七大领域和相...

osc_anefoz50
10分钟前
0
0
怕入错行?这群技术人写了本“择业指南”

计算机专业好找工作吗?哪些方向是当前的主流和热门方向呢? 计算机专业的你是不是还在为职业发展纠结犹豫呢? 刚经历完高考选专业的你是不是还在迷茫徘徊呢? 那么福利来啦! 《软件技术职业...

阿里云云栖号
10分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部