首页 > 其他分享 >阶乘后的零

阶乘后的零

时间:2024-09-08 20:03:36浏览次数:4  
标签:25 示例 结果 问题 解题 阶乘

题目描述:

给定一个整数 n ,返回 n! 结果中尾随零的数量。

提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1

示例 1:

输入:n = 3输出:0解释:3! = 6 ,不含尾随 0

示例 2:

输入:n = 5输出:1解释:5! = 120 ,有一个尾随 0

示例 3:

输入:n = 0输出:0

提示:

0 <= n <= 104
进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?

Related Topics

数学

个人思考:

           1.暴力求解
                暴力求解是求解过程中脑海中的第一个想法,为什么呢?因为简单,不用过多的思考就能上手开始写代码。对应的原理其实也很简单就是计算阶乘后的结果然后对结果从末尾判断0的个数。然后就开始一通啪啪啪的键盘操作,最后自信满满的提交代码,其结果也是可想而知,啪啪啪的打脸来的太快,都没开始就已经结束了

             2.以上就是解答失败的结果,测试用例也才通过了21个,但是报错的信息也仅仅提示了数值太大没有,于是就有了第二个想法,那就是把数据结构储存的换成BigDecimal是不是问题就解决了?于是说干就干,立马执行,结果leetcode根本不能识别BigDecimal的数据结构,啪啪啪又一次被打脸了

于是,通过以上的两次失败引发了自己的两个思考:
              1.即使n不是很大,但是阶乘的结果往往很大,即使自己使用更大的数据存储还是会有边界的问题存在,而且所占用的内存也会很大,这样达不到自己预期的效果
              2.复杂度:题目进阶提醒的复杂度能否缩减?

带着以上的两个问题我开始了解到自己的解题思路有问题,而且问题很大,如果只是解决一个问题可能不是很难,但是要避免各种问题的出现就疲于奔命了,所以需要换种思路解题
如何解题呢?这是新的问题,于是我试着按照最原始的方式列式子找规律先计算小的数的阶乘。3!,4!,5!,6!我发现一个规律,那就是似乎结尾出现0的次数跟5相关,例如5!只有一个0(15),10的阶乘就是(25)似乎只要把一个数除以5似乎就能得到正确的答案,于是代码提交一气呵成,可惜结果依然是错的,25的阶乘返回了6,这似乎与自己想的不一样但又好像差不了多少,那么问题出现在哪里呢?为什么25(5*5)的阶乘是6?等等,似乎有点不对,前面我们只考虑了除以5的结果,然而忽略了除以5后的结果,什么意思呢?举个例子,例如25的阶乘我只考虑了除以5 的结果,并没有考虑结果中是否还能继续的>=5,所以我将结果又再一次作为阶乘的值代入,这样的结果就得到的6,具体的逻辑就是25 / 5 =5,结果为5时,又再一次的5/5得到1,将两次的结果相加的到6,具体的代码如下

             这次的提交果然没让我失望,验证成功并通过,而且内存的使用和执行时间都还不错,上面所说的两个问题也得到了解题这就是我解题的整个思考过程和解题思路,更像是摸着石头过河,遇到问题的时候去解决问题,解决不了问题时,一定是自己的解题思路出现了问题,推倒重来往往能收获意想不到的结果

标签:25,示例,结果,问题,解题,阶乘
From: https://www.cnblogs.com/java-cheng/p/18403341

相关文章

  • 累加n次阶乘分之一
    请编写函数fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给n输入15,则输出为:s=2.718282注意:要求n的值大于1但不大于100。#include<stdio.h>#pragmawarning(disable:4996)doublefun(intn){ inti=0; intj=1; doublesum=1; for(i=1;i<=n;i+......
  • Python——求一个整数的阶乘是多少?
    没注释的源代码factorial=1number=int(input("请输入你计算阶乘的数字:"))ifnumber<0:  print("{}!没有阶乘".format(number))elifnumber==0:  print("{}!等于1".format(number))else:  foriinrange(1,number+1):    factorial......
  • Python程序:递归实现阶乘函数的优化与代码解读
    一、引言阶乘(Factorial)在数学和计算机科学中是一个常见的概念,它表示一个正整数的所有正整数的乘积。阶乘的定义如下:n!=n×(n−1)×(n−2)×…×1其中,0!定义为1。本文将以递归方式实现阶乘函数,并对代码进行优化与解释。二、原始代码首先来看一个简单的递归实现阶乘的P......
  • Shell函数:递归函数、阶乘和函数库
    文章目录递归函数示例1:阶乘计算示例2:递归列出目录函数库递归函数递归是指函数在其内部调用自身。递归函数常用于解决像阶乘、斐波那契数列等问题。示例1:阶乘计算阶乘(Factorial)是数学中的一种运算,表示从1乘以2乘以3…直到某个数n的乘积,记作n!。例如:4!=1×2×......
  • 阶乘之和
    Description给出⼀个自然数,求这个数是否能够表示成⼏个不同的正整数的阶乘之和。FormatInput有多组数据。第⼀⾏⼀个正整数T,表示共有T组数据。接下来T⾏,每⾏⼀个自然数N。Output输出T⾏。如果该数可以被表示为⼏个不同的正整数的阶乘之和,输出“TAK”(不含引号)......
  • 超详细明了的C语言函数递归,望周知。(包含求n的阶乘顺序打印⼀个整数的每⼀位求第n个斐
    1.递归是什么?递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。写⼀个史上最简单的C语⾔递归代码#include<stdio.h>intmain(){printf......
  • PTA 6-8 简单阶乘计算
    6-8简单阶乘计算(10分)本题要求实现一个计算非负整数阶乘的简单函数。函数接口定义:intFactorial(constintN);其中N是用户传入的参数,其值不超过12。如果N是非负整数,则该函数必须返回N的阶乘,否则返回0。裁判测试程序样例:#include<stdio.h>intFactorial(consti......
  • 使用递归函数计算阶乘时,我在 python 中遇到类型错误
    defcalc_fact(n):如果(n==1或n==0):返回1别的:n*calc_fact(n-1)print(calc_fact(5))试图创建函数来计算阶乘,不支持类型错误操作数*:对于int或Nonetype我不知道为什么谢谢Python代码中出现“类型错误:不支持的操作数类型为*:'int'和'NoneType'”表明你......
  • 【c语言】函数递归的一些例题1.编写一个函数,不许创建临时变量,求字符串长度 2.求n的阶
    1.intmy_strlen(char*str){   if(*str!='\0')   {      return1+my_strlen(str+1);//利用递归求字符串长度:递归一次就是多一个字符这样就可以求出字符串的长度了   }   else      return0;}intmain(){   //编写......
  • 递归算法【计算阶乘】
    递归算法是一种在计算机科学和数学中广泛使用的编程技巧,它允许函数直接或间接地调用自身以解决问题。递归的基本思想是将复杂的问题分解为更小的、相似的子问题,直到这些子问题足够简单可以直接解决为止。递归算法通常包含两个主要部分:基本情况(BaseCase):这是递归调用的终止......