高精-阶乘和-保姆级教程

news2025/1/21 3:59:46

提供50的阶乘30414093201713378043612608166064768844377641568960512000000000000;

显然要做这题,int 或者 long long 类型的整型放不下这么长的数据所以我们要使用数组用高精度实现;

然后容易想到这题 肯定要用到高精度乘法和高精度加法;

进一步思考,如

算一个数的阶乘,比方说我们算  5 的阶乘难道要分别算完五个数的阶乘再相加吗,显然时间复杂度是很高的

所以我们可以考虑设计一个比方说算到5的阶乘就可以把1 2 3 4 的阶乘都给存起来,然后根据一定的特性把这些数全加起来;

long long a[51][200] = {0};//存初始数 
	long long b[51][200] = {0};//存放阶乘 
	long long c[51][200] = {0};//存放阶乘和	 

这么构思的思考是:既能根据单调特性方便写循环,又能直线的得出答案降低时间复杂度;

#include<stdio.h>
void f1(long long a[51][200],long long b[51][200],int i){
	int p1,p2,m1,m2,m3;
	for(p1=0;p1<=1;p1++){
		for(p2=0;p2<=99;p2++){
			 b[i][p1+p2]=b[i-1][p2]*a[i][p1]+b[i][p2+p1];
		}}
		for(m1=0;m1<=99;m1++){
			if(b[i][m1]>=10) {
			m2 = b[i][m1]%10;
			m3 = b[i][m1]/10;
			b[i][m1] = m2;
			b[i][m1+1] = m3 + b[i][m1+1];
		}
	}
}
void f2(long long b[51][200],long long c[51][200],int j){
	int x1,x2;
	for(x1=0;x1<=99;x1++){
		c[j][x1]=b[j][x1]+c[j-1][x1];
		}
		for(x2=0;x2<=99;x2++){
			if(c[j][x2]>=10){
			c[j][x2+1]=1+c[j][x2+1];
			c[j][x2]=c[j][x2]%10;
		}
	}
}
		
int main(){
	long long a[51][200] = {0};//存初始数 
	long long b[51][200] = {0};//存放阶乘 
	long long c[51][200] = {0};//存放阶乘和	 
	int i,j,n,k1,k2,z,v;
	scanf("%d",&n);
	for(i=1;i<=n;i++){		
		if(i>=10){
			k1 = i%10;
			k2 = i/10;
		a[i][0] = k1;
		a[i][1] = k2;
		}
		else a[i][0] = i;
	}//将位数上的数字按照从小到大排列 
    b[0][0] = 1;
	for(i=1;i<=n;i++){
		f1(a,b,i);//实现乘法 
	}
	for(j=1;j<=n;j++){
		f2(b,c,j);//实现加法 
	}
	for(z=199;z>=0;z--){
		if(c[n][z]!=0)break;//输入后往前输入,只要不等于0说明这个数字已经开始 
	}
	for(v=z;v>=0;v--){
		printf("%lld",c[n][v]);//输出
	}
	
		
	}

这里说明乘法,后一位遍乘数组的比前一位遍乘数组的,整体放的数组位要向后挪一位;

这里有一个小trick:  b[0][0]赋值为1是方便启动乘法

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外包干了3周,技术退步太明显了。。。。。

先说一下自己的情况&#xff0c;大专生&#xff0c;21年通过校招进入武汉某软件公司&#xff0c;干了差不多3个星期的功能测试&#xff0c;那年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了3周的功…

Qt(10.11)

数据表 源代码&#xff1a; #include "widget.h" #include "ui_widget.h" #include<QMessageBox>//消息对话框 #include<QDebug> #include<QSqlRecord> Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui-&g…

十、pico+Unity交互开发教程——射线抓取与更多交互功能

一、回顾与引入 回顾上一篇直接抓取的教程&#xff0c;VR交互一般需要可交互的对象&#xff08;Interactable&#xff09;和发起交互的对象&#xff08;Interactor&#xff09;。直接抓取和射线抓取的可交互对象无区别&#xff0c;可参考上一篇教程设置组件。两者区别在于发起…

【Vercel】Vercel静态部署踩坑

背景 在现代的软件开发中&#xff0c;自动化部署是一个不可或缺的环节。Vercel作为一个流行的前端部署平台&#xff0c;提供了与GitHub的无缝集成&#xff0c;使得开发者能够在每次提交代码后自动触发部署流程。然而&#xff0c;自动化部署过程中可能会遇到一些挑战&#xff0…

性能测试:流量回放工具-GoReplay!结合一款无需CA证书即可抓取HTTPS明文的工具,简直无敌

性能测试&#xff1a;流量回放工具-GoReplay&#xff01;结合一款无需CA证书即可抓取HTTPS明文的工具&#xff0c;简直无敌。 GoReplay 是一个开源网络监控工具&#xff0c;可以将实时 HTTP 流量捕获并重放到测试环境。 应用成熟的过程中&#xff0c;测试所需的工作量往往会成…

学习干货小白女友看完这篇文章后,面试工作和护网蓝队初级竟然秒通过!

小白女友看完这篇文章后&#xff0c;面试工作和护网蓝队初级竟然秒通过&#xff01; 前言&#xff1a;本文中涉及到的相关技术或工具仅限技术研究与讨论&#xff0c;严禁用于非法用途&#xff0c;否则产生的一切后果自行承担&#xff0c;如有侵权请联系。 还在学怎么挖通用漏…

【Linux】<互斥量>解决<抢票问题>——【多线程竞争问题】

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

Axure树形菜单展开与折叠

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;Axure树形菜单展开与折叠 主要内容&#xff1a;树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景&#xff1a;关系树、菜…

老机MicroServer Gen8再玩 OCP万兆光口+IT直通

手上有一台放了很久的GEN8微型服务器&#xff0c;放了很多年&#xff0c;具体什么时候买的我居然已经记不清了 只记得开始装修的时候搬家出去就没用了&#xff0c;结果搬出去有了第1个孩子&#xff0c;孩子小的时候也没时间折腾&#xff0c;等孩子大一点的时候&#xff0c;又有…

MongoDB查询操作

&#x1f337;启动mongo &#x1f388;启动mongo shell &#xff08;1&#xff09;在指定目录下创建mongodb文件夹、其子文件夹data、log以及文件mongodb.log cd /home/ubuntu mkdir -p mongodb/data mkdir -p mongodb/log touch mongodb/log/mongodb.log(2)先执行mongodb命…

《计算机视觉》—— 疲劳检测

文章目录 一、疲劳检测实现的思想二、代码实现 一、疲劳检测实现的思想 了解以下几篇文章有助于了解疲劳检测的方法 基于dlib库的人脸检测 https://blog.csdn.net/weixin_73504499/article/details/142977202?spm1001.2014.3001.5501 基于dlib库的人脸关键点定位 https://blo…

基于开源Jetlinks物联网平台协议包-MQTT自定义主题数据的自动回复

目录 1.根据需要自动回复某些主题 2.调用doReply方法进行自动回复 1.根据需要自动回复某些主题 根据主题判断&#xff0c;哪些主题是需要自动回复的&#xff0c;比如设备登录&#xff0c;需要自动回复。 2.调用doReply方法进行自动回复&#xff08;代码不一定全部正确&#xf…

第 5 章:vuex

1. 理解 vuex vuex 是什么&#xff1a; 概念&#xff1a;专门在 Vue 中实现集中式状态&#xff08;数据&#xff09;管理的一个 Vue 插件&#xff0c;对 vue 应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&am…

安乃达:用CRM构建从销售到管理到售后的全链路数字化运营平台

安乃达驱动技术(上海)股份有限公司((简称&#xff1a;“安乃达”,股票代码为&#xff1a;“603350”))自2011年以来&#xff0c;公司通过多年的研发与积累现有直驱轮毂电机、减速轮毂电机和中置电机三大系列产品&#xff0c;并具备与电机相匹配的控制器、传感器、仪表等电驱动成…

springboot旧物置换网站

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

ThinkPHP 3.2 + Nginx 页面404问题

学习公司Callout项目时&#xff0c;发现公司项目所使用的TP版本是3.2&#xff0c;所以才可以使用例如&#xff0c;C,M,A等方法 因此我用phpEnv搭建了一个项目&#xff0c;域名为thinkphp&#xff0c;所选根目录如下 我打开网页&#xff0c;访问 thinkphp/ 和 thinkphp/index.p…

ROS 的 urdf 中 link 和 joint 的子标签中 origin 的含义

主要参考文章——主要文章&#xff0c;官方关于urdf的介绍和官方文档的翻译解析 link标签里面的origin含义 link标签里面有三个主要的子标签&#xff0c;分别是visual——连杆的外观和坐标系&#xff0c;collisoin——连杆的碰撞属性和inertial——连杆的惯性设置 首先&…

C++ | AVL树

前言 本篇博客讲解c中数据结构AVL树&#xff0c;看这篇博客之前请先去看&#xff1a;C | 二叉搜索树-CSDN博客 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-m…

2024最新:零基础到精通的大模型AI产品经理全学习路线

随着人工智能技术的发展&#xff0c;尤其是大模型&#xff08;Large Model&#xff09;的兴起&#xff0c;越来越多的企业开始重视这一领域的投入。作为大模型产品经理&#xff0c;你需要具备一系列跨学科的知识和技能&#xff0c;以便有效地推动产品的开发、优化和市场化。以下…

第51期 C语言实现中断<一>

Q&#xff1a;怎样理解用C语言实现中断的过程呢&#xff1f; A&#xff1a;以下是一段使用C语言实现中断的主程序&#xff0c;和汇编语言实现中断一样也使用了定时器中断和按键中断。执行该主程序会在DE2-115的红色LED上显示流水灯&#xff0c;按下KEY1可以改变流水灯移动的…