#include <stdio.h>
main() {
int n;
scanf("%d", &n);
int zz, count;
int i = 5;
while(zz >= 1) {
zz = n / i;
count += zz;
i = i * 5;
}
printf("%d", count);
}
这是用于在数字的阶乘中查找尾随0的代码。 它在Ubuntu中提供的输出不同于Windows。
答案 0 :(得分:1)
通过在编译期间启用警告,您可以找到至少一些问题。在这种情况下(clang -Wall -Wextra the_file.c
的输出):
tst.c:3:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main() {
^
tst.c:10:9: warning: variable 'count' is uninitialized when used here [-Wuninitialized]
count += zz;
^~~~~
tst.c:6:18: note: initialize the variable 'count' to silence this warning
int zz, count;
^
= 0
tst.c:6:9: warning: variable 'zz' is used uninitialized whenever function 'main' is called [-Wsometimes-uninitialized]
int zz, count;
~~~~^~
tst.c:8:11: note: uninitialized use occurs here
while(zz >= 1) {
^~
tst.c:6:11: note: initialize the variable 'zz' to silence this warning
int zz, count;
^
= 0
3 warnings generated.
你应该先解决所有这些问题。
答案 1 :(得分:0)
我不确定您究竟在问什么,但我可以指出您的代码存在一些问题:
scanf
。如果你避开整个scanf
系列函数,你会更开心。zz
和count
而未初始化它们。 C不会将变量初始化为任何特定值;你必须自己初始化它们。main
更改为int main
。他们做同样的事情,但后者更容易阅读。如果你添加一些测试用例来解释你的代码应该做什么,那么回答你的问题会更容易。
答案 2 :(得分:0)
未初始化的变量
int zz, count;
int i = 5;
while(zz >= 1) { // what is zz?
i = i * 5;
溢出。未定义的行为。不同系统的不同结果并不出人意料。
-
无需计算阶乘。只需计算5
中n
的数量。
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
printf("%d", n/5);
}
15! --> 1307674368000
9! --> 362880
要尾随0,事实需要5的倍数和2的倍数的乘积。因子组合中的每个其他数字是偶数,每5是5的倍数。
答案 3 :(得分:0)
public static void main(String[] args) {
int n=23;
String fact= factorial(BigInteger.valueOf(23)).toString();
System.out.format("Factorial value of %d is %s\n", n,fact);
int len=fact.length();
//Check end with zeros
if(fact.matches(".*0*$")){
String[] su=fact.split("0*$");
//Split the pattern from whole string
System.out.println(Arrays.toString(fact.split("0*$")));
//Subtract from the total length
System.out.println("Count of trailing zeros "+(len-su[0].length()));
}
}
public static BigInteger factorial(BigInteger n) {
if (n.equals(BigInteger.ONE) || n.equals(BigInteger.ZERO)) {
return BigInteger.ONE;
}
return n.multiply(factorial(n.subtract(BigInteger.ONE)));
}