2018-01-16 求阶乘尾部的0的个数

  long long n = 0;
    printf("请输入一个正整数\n");
    scanf("%ld",&n);

    long long k = 0 ,s  = n;
    while(s > 0){
        s /= 5;
        k +=s;
    }
    printf("%ld 的阶乘中,末尾有%ld个'0' \n",n,k);

解析:

  • 标准(素因数)分解式
    求正整数的标准分解式的过程叫做正整数的素因数分解。
    任意整数n>1都可以唯一表示为:
    n=(p1a1)*(p2a2)……(pk^ak)
  • 尾数0分解
    尾数有几个0,就是说可以被几个 10 整除 ,也就是说可以被 几个2*5整除,因为每2个数,就能被2 整除,每5个数能被5整除,所以能被5整除的个数小于能被2整除的个数, 所以求出能被几个5 整除则可以成功求得能被几个10 整除.

使用到了阶乘的标准分解式中素因数的指数,


2018-01-16 求阶乘尾部的0的个数_第1张图片
2018-01-16 求阶乘尾部的0的个数_第2张图片

阶乘:
阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语。

一个正整数的阶乘factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

1 - 1000 的阶乘:
http://blog.csdn.net/lzmtw/article/details/1344490

你可能感兴趣的:(2018-01-16 求阶乘尾部的0的个数)