[解题报告]《C语言入门100例》(第7例) 给定 n,求 1 × 2 × 3 × ... × n 的乘积

简介: [解题报告]《C语言入门100例》(第7例) 给定 n,求 1 × 2 × 3 × ... × n 的乘积

零、写在前面


       这个系列不经常更新,今天这个题目又觉得有点意思,我们一起看一看,主要知识点在


《C语言入门100例》(第7例) n!

https://blog.csdn.net/WhereIsHeroFrom/article/details/118208252


一、主要知识点


       1.给定 n,求 1 × 2 × 3 × ... × n 的乘积

int ans = 0,n;
while(n) {            
    ans *= n;        
    --n;             
}

二、课后习题


  面试题 16.05. 阶乘尾数


面试题 16.05. 阶乘尾数

https://leetcode-cn.com/problems/factorial-zeros-lcci/


     思路


       这道题就是让求尾数0的个数,要产生一个0,那么因子里必有一个5一个2,n!每两个数字就有一个为偶数,也就是包含2因子,但是每五个才包含一个5因子,所以我们统计多少个5末尾就会又多少个0。


       如果一个数字是5的多少倍那么就会贡献多少个5因子,同时5^2会贡献两个,第一次算过了就可以只算贡献一个。5^3贡献的三个前两个被5^1和5^2给计算过了,所以也是加一次就好了。代码如图。


int trailingZeroes(int n){
    int i = 0,ans = 0,temp = 1;
    for(i = 0;temp <= n && temp < 429496730;i ++){
        temp *= 5;            //穷举所有的5的指数
        ans += n / temp;    //计算5因子个数
    }
    return ans;
}

结果分析


image.png


我就是觉得4ms和0ms没差别-.-


793. 阶乘函数后 K 个零


793. 阶乘函数后 K 个零

https://leetcode-cn.com/problems/preimage-size-of-factorial-zeroes-function/


思路


这道题和第一题很类似,只要找出来相应的x拥有k个零那么就返回5,否则就是0,因为一定有5a ,5a+1,5a+2.5a+3,5a+4五个数字拥有相同的0的个数。


利用二分查找相应的x,差找范围是 k- 5*k +1,原因是含有k个零的元素最小是k,最大不超过5*k+1,原因是5*k就含有k个5的倍数,这个数字含有的零元一定比k多。+1是为了统一0的处理。

long zeta(long x){            //判断x又多少个0
    if(!x) return 0;          //递归出口      
    return x / 5 + zeta(x / 5); //分解x!中包含的5因子个数
}
int preimageSizeFZF(int k){
    long low = k,high = (long)k * 5 +1;//从k-k*5+1中寻找是否有满足要求的解
    while(low < high){                  
        long mid = (low + high) /2;     
        long zmi = zeta(mid);       
        if(zmi == k) return 5;          //找到则返回
        else if(zmi < k) low = mid +1;  
        else high = mid;                
    }
    return 0;                           //没找到返回0
}



结果分析

image.png



凑合玩吧。。


写在最后


这个系列确实是不怎么更新,但是我觉得有难度的题都会进行更新,所以还是建立一个合集,有需要的欢迎关注。


相关文章
|
12月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
186 2
|
10月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
307 7
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
9月前
|
存储 编译器 C语言
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
本文档介绍了C语言环境配置和编程任务,主要内容包括: - **C语言环境配置**:详细讲解了在Windows系统上配置C语言开发环境的步骤。 - **第1关:程序改错**:包含任务描述、相关知识(如头文件引用、基本语法规则)、编程要求、测试说明及通关代码。 - **第2关:scanf函数**:涉及`scanf`和`printf`函数的格式与使用方法,提供编程要求、测试说明及通关代码。 文档结构清晰,涵盖从环境搭建到具体编程任务的完整流程,适合初学者学习和实践。
177 4
|
9月前
|
C语言
【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
这份文档详细介绍了编程任务的多个关卡,涵盖C语言的基础知识和应用。主要内容包括: 1. **目录**:列出所有关卡,如`print函数操作`、`转义字符使用`、`数的向上取整`等。 2. **各关卡的任务描述**:明确每关的具体编程任务,例如使用`printf`函数输出特定字符串、实现向上取整功能等。 3. **相关知识**:提供完成任务所需的背景知识,如格式化输出、算术运算符、关系运算符等。 4. **编程要求**:给出具体的代码编写提示。 5. **测试说明**:包含预期输入输出,帮助验证程序正确性。 6. 文档通过逐步引导学习者掌握C语言的基本语法和常用函数,适合初学者练习编程技能。
226 1
|
12月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
143 1
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
12月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
103 0
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
151 4
【C语言入门】初识C语言:掌握编程的基石
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
189 1
|
存储 Java 程序员
【C语言入门】C语言入门:探索编程世界的基础概念
【C语言入门】C语言入门:探索编程世界的基础概念
273 2