本文目录一览:
如何用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由以下几种情况生成:
- 乘以100,得到2个0。
- 乘以10、20、30、40、60、70、80或90得到1个0,共8个0。
- 一个偶数乘以5得到1个0,共有5、15、35、45、55、65、85、95,共8个0。
- 偶数乘以50会得到2个0。
- 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