c语言求阶乘末尾0的个数,c语言1000的阶乘后面有多少个0

发布时间:2022-11-23

本文目录一览:

  1. 如何用C++编程阶乘尾数零的个数,N!末尾有多少个零
  2. C语言编程题(阶乘+尾数几个零)
  3. 100!末尾有多少个0C语言
  4. C语言编程求100的阶乖,末尾有多少个零

如何用C++编程阶乘尾数零的个数,N!末尾有多少个零

为了解决这个问题,必须首先从数学上分析在N!结果值的末尾产生零的条件。不难看出:一个整数若含有一个因子5,则必然会在求N!时产生一个零。因此问题转化为求1到N这N个整数中包含了多少个因子5。若整数N能被25整除,则N包含2个因子5;若整数N能被5整除,则N包含1个因子5。

程序说明与注释

#include <iostream>
using namespace std;
int main() {
    long a, count = 0;
    for (a = 5; a <= N; a += 5) {
        ++count;
        if (!(a % 25)) ++count;
    }
    cout << "The number of 0 in the end of N! is: " << count << endl;
    return 0;
}

C语言编程题(阶乘+尾数几个零)

#include <stdio.h>
void main() {
    int b, n;
    int temp[20];
    int i = 2, j = 0, k;
    int yinziNum[20];
    printf("请输入一个进制数和一个整数:\n");
    scanf("%d %d", &b, &n);
    if (b % 2 == 0)
        while (b % i == 0) {
            while (b % i == 0) {
                temp[j] = i;
                b = b / i;
            }
            i++;
            if (b % i == 0) j++;
        }
    for (i = 2; i <= n; i++)
        for (k = 0; k <= j; k++)
            while (i % temp[k] == 0 && i != 0) {
                yinziNum[k]++;
                i = i / temp[k];
            }
    int min = yinziNum[0];
    for (i = 1; i < k; i++)
        if (yinziNum[i] < min)
            min = yinziNum[i];
    printf("%d进制数%d的阶乘末尾共有%d个零!", b, n, min);
}

100!末尾有多少个0C语言

100! = 1 * 2 * 3 * ... * 100 结果中末尾0由以下几种情况生成:

  1. 乘以100,得到2个0。
  2. 乘以10、20、30、40、60、70、80或90得到1个0,共8个0。
  3. 一个偶数乘以5得到1个0,共有5、15、35、45、55、65、85、95,共8个0。
  4. 偶数乘以50会得到2个0。
  5. 4乘以25或75各会得到2个0,共4个0。 故100!末尾共有24个0。

算法描述

从4! = 24开始计算,如果阶乘值末尾为0,就把末尾0去掉,计数器加1;如果末尾不为0,只保留个位数即可。最后再进行一次末尾0的扫描操作。

C语言程序

#include <stdio.h>
void main() {
    int i;
    long f = 24;
    int c = 0;
    for (i = 5; i <= 100; i++) {
        f *= i;
        if (f % 10 == 0) {
            f /= 10;
            c++;
        } else {
            f = f % 10;
        }
    }
    while (f % 10 == 0) {
        f = f / 10;
        c++;
    }
    printf("末尾0的总数量:%d", c);
}

运行结果:

末尾0的总数量:24

C语言编程求100的阶乖,末尾有多少个零

以C语言的数据类型来求100的阶乘不造成数据过大溢出是不现实的,所以不能在求得100的阶乘之后再数它末尾有多少个0,只能在累乘的过程中遇到一个0就干掉,最后数总共干掉了多少个。至于由于溢出前面丢掉了多少位的数就管不了了。

程序代码

main() {
    long a = 1;
    int i, n = 0;
    for (i = 2; i <= 100; i++) {
        a *= i;
        if (a > 10000) a = a % 10000;
        loop1:
        if (a > 10 && a % 10 == 0) {
            a /= 10;
            n++;
            goto loop1;
        }
    }
    printf("%d\n", n);
}

结果是:

24