我已经返回了代码以查找阶乘并在阶乘的末尾显示尾随零,但是输出错误...您能帮我找到错误吗?
#include <stdio.h>
int main() {
int m = 1, i, N, count = 0;
scanf("%d", &N);
for (i = 1; i <= N; i++) {
m = m * i;
}
printf("%d", m);
while (m > 0) {
if ((m % 10) == 0) {
count = count + 1;
m = m / 10;
}
break;
}
printf("%d", count);
return 0;
}
答案 0 :(得分:6)
您的代码仅适用于N
的极小值:最高9
。对于稍大的值,您需要在else
语句之前添加一个break;
关键字,在更多情况下,您将获得正确的结果。
对于较大的值,必须计算除以阶乘的5的幂。您可以通过累加5的幂(将每个数字除以N
并包括#include <stdio.h>
int main() {
int N, count;
if (scanf("%d", &N) != 1)
return 1;
/* only consider factors that are multiples of 5 */
count = 0;
for (int i = 5; i <= N; i += 5) {
for (int j = i; j % 5 == 0; j /= 5)
count++;
}
printf("%d\n", count);
return 0;
}
)来逐步执行此操作。
5
一个更简单的解决方案是:计算N
小于或等于5*5
的倍数,加上#include <stdio.h>
int main() {
int N, count;
if (scanf("%d", &N) != 1)
return 1;
count = 0;
for (int i = N; (i /= 5) > 0;) {
count += i;
}
printf("%d\n", count);
return 0;
}
的倍数,等等。
代码如下:
{{1}}
答案 1 :(得分:1)
您有两个问题
因此,最小的变化产生了:
int main()
{
int m=1,i,N,count=0;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
m=m*i;
}
printf("%d\n",m); /* <<< added \n */
while(m>0)
{
if((m%10)==0)
{
count=count+1;
m=m/10;
}
else /* <<< added else */
break;
}
printf("%d\n",count); /* <<< added \n */
return 0;
}
更改后:
pi@raspberrypi:/tmp $ ./a.out
5
120
1
pi@raspberrypi:/tmp $ ./a.out
10
3628800
2
当然,首先要假设您能够计算阶乘而不会溢出
我还建议您检查 scanf 读取的值,并检查它是否返回1
答案 2 :(得分:0)
#include <stdio.h>
int main()
{
int n,i,f=1,t,c=0;
printf("Enter number ");
scanf("%d",&n);
t=n;
for(i=1;t>=5;i++)
{
t=n/5;
c=c+t;
n=t;
}
printf("number of zeros are %d",c);
return 0;
}