首页 > 其他分享 >西农OJ P1073 阶乘TvT

西农OJ P1073 阶乘TvT

时间:2023-08-20 16:23:17浏览次数:51  
标签:10 西农 数字 输出 int TvT 60 阶乘

1073: 阶乘

题目描述

给一个整数,请输出该数字阶乘的后缀0的个数,例如:
数字7,它的阶乘为5040,后面有一个0,则输出1;还有数字10,它的阶乘为3628800,后面有两个0,则输出2。

输入

第一行一个数据N,小于100,表示一共要输入n个数字,以后n行输入一个数字。

输出

对应于每一个输入,输出一个满足题目要求的数字。

样例输入

6
3
60
100
1024
23456
8735373

样例输出

0
14
24
253
5861
2183837

思路

不会有人要算出阶乘然后判断吧, 我开始写了一个计算阶乘, 还用了字符串存数字, 模拟手算. 然后发现自己是一个蠢蛋. 试问8735373的阶乘是多少捏.

正确思路是因式分解, 2和5可以凑出一个0. 因为是乘法, 0 不会变成其他数字, 因此0会越积越多.

这里举一个例子:

10! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10
分解因式
10! = (1*1) * (1*2) * (1*3) * (2*2) * (1*5) * (2*3) * (1*7) * (2*2*2) * (3*3) * (2*5)
从这个式子中可以提出 2*5*2*5*2*2*2*2*2*2, 里面有两个2*5, 因此10!末尾有2两个0

通过上面的计算过程不难得出, 只需要找到5即可, 有几个5最终就有几个0 (2的数量永远大于等于5的数量, 不服自己推, 我做对了说话就是硬气)

因此可以这样, 以60!举例

60/5 = 12 # 60以内因子只有一个5的个数
12/5 = 2 # 60以内因子只有两个5的个数
2/5 = 0 结束计算 # 60以内因子只有3个5的个数
12+2 = 14
60!末尾有14个0

代码

#include<stdio.h>
int main(){
    int n = 0;
    scanf("%d",&n);
    while(n--){
        int c, s = 0;
        scanf("%d",&c);
        while(c/5 != 0){
            s += c/5;
            c /= 5;
        }
        printf("%d\n",s);
    }
    return 0;
}

标签:10,西农,数字,输出,int,TvT,60,阶乘
From: https://www.cnblogs.com/orzmiku/p/17644161.html

相关文章

  • 西农OJ P1067 Humble Number
    1067:HumbleNumber题目描述如果一个数只有素数因子2,3,5,7,那么这个数被称为“HumbleNumber”。前20个“HumbleNumber”是:1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24,25,27。经验证,2000000000以内的“HumbleNumber”共有5842个。你的任务是编写一个程序,根据要求输出序列中的某一个数。如22,......
  • 西农OJ P1005 装载问题
    装载问题问题描述有两艘船,载重量分别是c1、c2,n个集装箱,重量是wi(i=1…n),且所有集装箱的总重量不超过c1+c2。确定是否有可能将所有集装箱全部装入两艘船。输入多个测例,每个测例的输入占两行。第一行一次是c1、c2和n(n<=10);第二行n个整数表示wi(i=1…n)。n等于0标志输入结束。......
  • 西农OJ P1491 城市电话号码
    题目描述某城市电话号码包括地区码、前缀、有效号码三部分组成,其中地区码是0-4位数字;前缀是以非0开头的3位数字,有效号码是4位数字,各部分之间用减号(-)分隔,地区码为空时地区码与前缀之间不包含分隔符。请编写函数检测输入号码num的有效性,若输入号码符合上述规定返回0,否则返回1。函......
  • Acwing 197 阶乘分解
    我觉得都不用过多解释,看代码就懂了#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e6+10;intread(){ intx=0; chars=getchar(); while(s<'0'||s>'9') { s=getchar(); } while(s>='0'&&......
  • C# 表达式体方法 C#算阶乘
    //表达式体方法privateintAdd(inta,intb)=>a+b;[Fact]publicvoidTest(){varresult1=Factorial(1);//1varresult2=Factorial(2);//2varresult3=Factoria......
  • (简单)计算斐波那契数列与阶乘
    斐波那契数列pythondeffibonacci(n):ifn<=0:return"Invalidinput"elifn==1:return0elifn==2:return1else:prev_1=0prev_2=1for_inrange(n-2):curre......
  • T1173 阶乘和
    T1173阶乘和题目传送门首先,题目里说了高精度,那还想什么?这里介绍一个有亿点点难懂的方法上课!第一步首先,先建立一个结构体来模拟大整数类。结构体不仅可以包含成员变量,还能定义成员函数。代码如下:#definemaxn100structBigint{intlen,a[maxn];//为了兼顾效率和复......
  • 实现阶乘的运算
    #include<stdio.h>intmain(){unsignedlonglonginta=1;unsignedlonglongintb=0;unsignedlonglongintc=0;scanf("%llu",&c);getchar();for(b=1;b<=c;b+=1){a=a*b;}pr......
  • Java入门题-20!阶乘
    重要:由于阶乘的特殊性,结果可能过大,最好使用存储范围更大的long处理问题,而不是使用int、short、byte代码:主要利用循环语句解决阶乘问题longtotal=1;for(inti=1;i<21;i++){total*=i;}System.out.println(total);......
  • 阶乘
    #include<iostream>usingnamespacestd;inta(intn){if(n<=2){return1;}returna(n-1)+a(n-2);//a(n-1)*n}intmain(intargc,char**argv){system("pause");intN;cin>>N;cout<<a(N)&......