美文网首页
算法训练4

算法训练4

作者: 王执姬 | 来源:发表于2018-07-28 00:38 被阅读0次

题目描述
输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2
输入描述
输入为一行,n(1 ≤ n ≤ 1000)
输出描述
输出一个整数,即题目所求

示例
Input
10
Output
2

思路:
先用递归写一个函数求阶乘。
利用while循环给结果除以10取余,若余数为0,说明末尾是0,循环变量自增,当余数不为0时,跳出循环,输出循环变量
学长说难点是如何解决越界问题。。限制输入数字的大小。。就不会越界了。。但是就算这样,首先我要知道多少的阶乘会超出界限。好伐,其实我没想明白怎么解决。
但是由于阶乘是针对正整数的,所以可以把n和n!都定义成无符号类型,这样他的范围也就相对大了。

代码:

#include<stdio.h>
long fac(unsigned n){
    if (n == 0 || n == 1){
        return 1;
    }
    else{
        return (n * fac(n - 1));
     }
}
int main(){
    int i = -1;
    int flag=0;
    unsigned n,facn;
    scanf("%d",&n);
    facn = fac(n);
    while(flag == 0){
        i++;
        flag = facn%10;
        facn = facn/10;
    }
    printf("%d",i);
}

Q&A

Q:为什么i从-1开始?
A:如测试用例,阶乘结果有两个0,首次进入循环需要让余数初值为0,除掉第一个尾数0,循环变量增加1,余数为0;除掉第二个尾数值循环变量增加1,余数仍为0,还可以第三次进入循环,此时余数不为0,跳出循环。所以循环变量从-1开始,去掉进入循环时初始化余数的0的影响。

Q:对越界的解决?
A:待解决。

运行结果

运行结果

相关文章

  • 算法训练4

    题目描述输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以...

  • 第六章 更多监督训练

    介绍Lunar Lander示例 监督训练没有训练集 使用遗传算法 使用模拟退火算法 遗传算法和模拟退火算法的训练...

  • ImageAI:自定义预测模型训练

    ImageAI:自定义预测模型训练 ImageAI 提供4种不同的算法及模型来执行自定义预测模型训练,通过以下简单...

  • diploSHIC使用案例

    在有监督的机器学习的常规工作流程中,创建一个训练集,使用该集训练算法,验证训练后算法的准确性,然后最终将训练后算法...

  • 机器学习:KNN(K 近邻)分类算法

    kNN 算法不需要经过算法训练,属于懒惰学习,需要训练的属于急切学习kNN 是最简单的分类算法 优点:精度高、对异...

  • 提升方法

    提升方法 提升方法 AdaBoost 算法 AdaBoost算法的训练误差分析 AdaBoost算法的解释 提升树...

  • 【西瓜书】第8章 集成学习

    GBDT GBDT的算法过程: GBDT工作过程实例。 还是年龄预测,简单起见训练集只有4个人,A,B,C,D,他...

  • 算法4(Algorithms4)- Part 1 算法分析(A

    算法4(Algorithms4)- Part 1 算法分析(Analysis Of Algorithms) 注:...

  • 机器学习第一天

    步骤:收集数据---准备输入数据---分析输入数据---训练算法---测试算法---使用算法 ①K邻近算法存在一个...

  • 机器学习ML-策略1-Machine Learning-Stra

    机器学习ML - Strategy 当我们在开发机器学习算法和训练时,我们发现自己的算法和训练模型达到了90%,但...

网友评论

      本文标题:算法训练4

      本文链接:https://www.haomeiwen.com/subject/keenmftx.html