PTA 函数题(C语言)-- 阶乘计算升级版
题目title: 阶乘计算升级版 题目作者: 陈越 浙江大学
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
void Print_Factorial ( const int N );
其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。
裁判测试程序样例:
#include <stdio.h>int Factorial( const int N );int main()
{int N, NF;scanf("%d", &N);NF = Factorial(N);if (NF) printf("%d! = %d\n", N, NF);else printf("Invalid input\n");return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
15
输出样例:
1307674368000
思路:这道题目的最后一个测试点是一个坑,要通过最后一个测试点就不能用普通的int、long long去存放计算出来的阶乘了,因为会越界!
我们的思路是用一个数组F[N]来存放阶乘(这里数组长度最小设置为N=2568,这个长度是我试出来的刚好能通过最后一个测试点的最小数组长度,多写点也无所谓)。存放的结构是低位在前,即F[0]存放的是个位,依此类推。
计算阶乘的时候我们用外层循环让i从2迭代到N,每次迭代给F"乘以"i。
这里的这个给数组"乘以"一个数,是用里层循环完成的,就按照我们小学学过的整数带进位的乘法。遍历从F[0]到F[N-1],比如遍历到某个F[j],我们要做的运算下面3步:
(1)给F[j]乘以外层循环当前的i,在加上F[j]前一项进位过来的值carry,然后把结果赋值给F[j],即F[j]=F[j]*i+carry;
(2)计算出要进位给下一位F[j+1]的值,carry = F[j]/10;
(3)F[j]只保留个位数字,F[j] = F[j]%10。
当里层循环遍历完,就像相当于给当前的阶乘F"乘以"外层循环当前的i,
当外层循环迭代完,F就存储了我们想要的阶乘了,只不过存储的结构是低位在前。
最后,我们要找到数组最后一个不为0的元素,从这个元素开始倒序输出数组即可。
代码:
void Print_Factorial ( const int N ) {int i, j, carry = 0;int M = 2568, F[2568] = {1}; // 初始化一个长度为2568的数组,为什么是2568呢?因为刚好能通过最后一个测试点。比2568长,是可以的。if (N < 0) {printf("Invalid input");return;} else if (N == 0) {printf("1");return;} else if (N > 0) {for (i = 2; i <= N; i++) { // 用数组F来存放每次迭代算出来的阶乘,存放时低位在前,即F[0]存放的是个位,依此类推。for (j = 0; j < M; j++) { // 乘的时候,用for循环对数组F的每个元素进行处理,计算的原则就是带进位的乘法。F[j] = F[j]*i+carry;carry = F[j]/10;F[j] = F[j]%10;}}for (i = M-1; i >= 0; i--) {if (F[i] != 0) {break;}}for (j = i; j >= 0; j--) {printf("%d",F[j]);}return;}
}
更多PTA题目的的参考代码,可以在wx小程序里搜“PTA刷题助手”,或扫下面的二维码

相关文章:
PTA 函数题(C语言)-- 阶乘计算升级版
题目title: 阶乘计算升级版 题目作者: 陈越 浙江大学 本题要求实现一个打印非负整数阶乘的函数。 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000。如果N是非负整数&#…...
内网穿透入门
内网穿透 内网穿透(英文:Port Forwarding)是一种网络技术,用于将公共互联网(外网)的请求转发到私有局域网(内网)中的特定设备或服务。在许多情况下,设备或服务位于一个局…...
Pickle pyhton反序列化
参考文章 Python pickle反序列化浅析 Pickle包含四种方法 pickle.dump(obj, file) 将obj对象进行封存,即序列化,然后写入到file文件中 注:这里的file需要以wb打开(二进制可写模式) pickle.load(file) 将file这个文件进行解封,即反序列化 …...
动静分离技术
一、HAproxy 动静分离 1、概念: HAproxy 动静分离技术是一种用于优化 Web 服务器性能和提高用户体验的策略,它通过将动态内容和静态内容分别路由到不同的后端服务器来实现,减轻服务器负载,提高网站的响应速度。 动态内容包括由…...
STM32单片机智能小车一PWM方式实现小车调速和转向
目录 1. 电机模块开发 2. 让小车动起来 3. 串口控制小车方向 4. 如何进行小车PWM调速 5. PWM方式实现小车转向 1. 电机模块开发 L9110s概述 接通VCC,GND 模块电源指示灯亮, 以下资料来源官方,具体根据实际调试 IA1输入高电平ÿ…...
灰狼优化算法(GWO)python
目录 一、灰狼优化算法的python实现 二、灰狼优化算法与遗传算法的对比分析(python) 2.1 GWO1.py 2.2 GA1.py 2.3 GWO_vs_GA.py 2.4 运行结果 三、基于莱维飞行改进的灰狼优化算法的python实现 一、灰狼优化算法的python实现 import numpy as …...
项目知识点总结-住房图片信息添加-Excel导出
(1)住房信息添加 Controller: RequestMapping("/add")public String add(Home home, Model model) throws IOException{String sqlPath null;//定义文件保存的本地路径String localPath"D:\\AnZhuang\\Java项目\\选题\\Xin-…...
第三届iEnglish全国ETP大赛决赛即将启动
如今,寓教于乐的学习方式越来越受到家长和孩子的欢迎,“玩中学”成为一种既能培养兴趣又有助于孩子成长的学习趋势。 以“玩转英语,用iEnglish”为活动主题的第三届全国ETP大赛即将于本周五(11月3日)迎来总决赛的抽签仪式。据主办方iEnglish智能英语学习解决方案相关负责人称,…...
创造产业链协同优势后,凌雄科技在DaaS行业转动成长飞轮
企业服务领域,一直存在一种共识:做好很难,但一旦服务模式跑通了,得到了市场的认可,要滚起雪球就会事半功倍。 重资产、重运营的DaaS(设备及服务)赛道,是个非常典型的细分领域。在这…...
【protobuf】protobuf自定义数据格式,CMake编译C++文件读写自定义数据
protobuf自定义数据格式,CMake编译文件读写自定义数据 1.protobuf安装2.定义.proto文件3.编写main.cpp4.编写CMAkeLists配置文件5.运行 1.protobuf安装 protobuf库链接 2.定义.proto文件 新建一个Person.proto文件和一个Animal.proto文件,内容如下&…...
解决:http://localhost:8080 不在以下 request 合法域名列表中
在搭建资源服务器时,遇到了微信开发者工具中无法访问本地资源服务器的情况,报错如下: 参考一篇博文的方法,完美解决 【解决】http://localhost:8080 不在以下 request 合法域名列表中_localhost不在以下 request 合法域名列表中-…...
Linux普通用户提权(sudo)
文章目录 Linux普通用户提权(sudo)1、在sudoers文件添加普通用户2、测试 Linux普通用户提权(sudo) 1、在sudoers文件添加普通用户 正常来说,普通用户初始是不具备提权的能力的,比如执行sudo ls会出现报警告…...
链表指定节点的插入
向现有链表中插入结点,根据插入位置的不同,可分为以下 3 种情况: 插入到链表的头部,作为新的链表中第一个存有数据的结点(又称为”首元结点”);插入到链表中某两个结点之间的位置;插…...
解决问题Conda:CondaValueError: Malformed version string ‘~’ : invalid character(s)
解决问题Conda:CondaValueError: Malformed version string ‘~’ : invalid character(s) 背景 今天使用Conda构建项目运行环境的时候报错::CondaValueError: Malformed version string ‘~’ : invalid character(s) ##报错问题 在安装te…...
Sci Immunol丨Tim-3 适配器蛋白 Bat3 是耐受性树突状细胞
今天和大家分享一篇发表于2022年3月的文章,题目为“Tim-3 adapter protein Bat3 acts as an endogenous regulator of tolerogenic dendritic cell function”,发表在《Sci Immunol》杂志上。文章主要研究了Tim-3和其适配蛋白Bat3在调节免疫应答中的作用…...
天软特色因子看板(2023.10 第14期)
该因子看板跟踪天软特色因子A05005(近一月单笔流通金额占比(%),该因子为近一个月单笔流通金额占比因子,用以刻画股票在收盘时,主力资金在总交易金额中所占的比重。 今日为该因子跟踪第14期,跟踪其在SW801160 (申万公用事业) 中的表…...
Photoshop(PS)2021版 安装教程(图文教程超详细)
软件:PS版本:2021语言:简体中文大小:2.26G安装环境:Win11/Win10(1809以上版本)硬件要求:CPU2.0GHz 内存4G(或更高,不支持7代以下CPU)下载通道①百度网盘丨64位…...
详解React:Props构建可复用UI的基石
React是一种流行的JavaScript库,用于构建用户界面。它的组件化架构使得开发人员能够轻松地构建可复用的UI元素,从而提高开发效率。在本文中,我们将探讨React中的组件和Props的重要性,以及如何利用它们来构建可复用的UI。 引言 在…...
【Unity】【VR开发疑难】Unity运行就报无法启动XR Plugin
【现象】 连接Link后运行Unity的VR项目Link也无反映,Unity控制台报:无法启动XR Plugin,并说是由于Oculus头盔未连接导致。 【分析】 打开Oculus PC客户端,发现状态是连接正常。重启机器后,提示Oculus没有出于RunTim…...
本地启动Elasticsearch(docker启动)
一、es版本7.17.0 docker run -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms256m -Xmx256m" -d --name ES01 elasticsearch:7.17.0进入容器,修改/usr/share/elasticsearch/config/elasticsearch.yml 添加如…...
Zabbix监控Docker化部署避坑指南:从镜像版本选择到安全加固的完整配置
Zabbix监控Docker化部署避坑指南:从镜像版本选择到安全加固的完整配置 在容器化技术席卷运维领域的今天,将Zabbix监控系统部署在Docker环境中已成为主流选择。但看似简单的docker-compose up -d背后,隐藏着无数可能让运维工程师深夜加班的&qu…...
5分钟搞定!B站视频下载神器BilibiliDown完整使用指南
5分钟搞定!B站视频下载神器BilibiliDown完整使用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi…...
5分钟搞定HeyGem数字人视频生成:科哥二次开发版,批量处理指南
5分钟搞定HeyGem数字人视频生成:科哥二次开发版,批量处理指南 1. 系统简介与核心价值 HeyGem数字人视频生成系统批量版是科哥基于原版进行的二次开发版本,专门针对企业级批量视频生成需求进行了优化。这个工具能够将一段音频与多个视频素材…...
the-glorious-dotfiles 核心功能解析:从通知中心到屏幕录制
the-glorious-dotfiles 核心功能解析:从通知中心到屏幕录制 【免费下载链接】the-glorious-dotfiles A glorified personal dot files 项目地址: https://gitcode.com/gh_mirrors/th/the-glorious-dotfiles the-glorious-dotfiles 是一套功能丰富的个人配置文…...
颠覆级开源模型Wan2.2-TI2V-5B:重新定义AI视频创作
颠覆级开源模型Wan2.2-TI2V-5B:重新定义AI视频创作 【免费下载链接】Wan2.2-TI2V-5B Wan2.2-TI2V-5B是一款开源的先进视频生成模型,基于创新的混合专家架构(MoE)设计,显著提升了视频生成的质量与效率。该模型支持文本生…...
2026行李箱推荐别乱买!唯尊、海澜之家、森马、外交官、珉璐保罗五款横评
对于技术从业者而言,行李箱不仅是装载衣物的容器,更是保护精密电子设备、应对高频差旅与跨城迁移的可靠装备。无论是前往异地调试系统、参加技术峰会,还是举家搬迁,一个设计合理、性能可靠的行李箱能显著提升出行效率与体验。本文…...
BiliTools终极指南:3分钟掌握跨平台B站资源管理工具
BiliTools终极指南:3分钟掌握跨平台B站资源管理工具 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 还在…...
利用Google Earth与KML技术高效提取数字高程等高线
1. 从零开始认识数字高程与KML技术 数字高程模型(DEM)就像给地球表面拍了一张"立体照片",它能精确记录每个位置的海拔高度。我第一次接触DEM数据时,被它的实用性震惊了——从洪水模拟到城市规划,再到手机导…...
FastAPI中间件性能优化:从GZip压缩到异步日志的7个提速技巧
FastAPI中间件性能优化:从GZip压缩到异步日志的7个提速技巧 当你的FastAPI应用开始处理每秒数千甚至百万级的请求时,中间件可能成为性能瓶颈的隐形杀手。本文将揭示如何通过7个关键技巧,让你的中间件处理速度提升300%以上。 1. 理解中间件的性…...
软件测试新范式:Phi-4-mini-reasoning智能生成测试用例与缺陷报告
软件测试新范式:Phi-4-mini-reasoning智能生成测试用例与缺陷报告 1. 传统测试流程的痛点与变革契机 在软件测试领域,工程师们长期面临着一个核心矛盾:随着敏捷开发和持续交付的普及,测试周期被不断压缩,但测试覆盖率…...
