pop*_*pop 2 c factorial trailing
我已返回代码以查找阶乘并在阶乘末尾显示尾随零,但输出错误...您能帮我找到错误吗?
#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;
}
Run Code Online (Sandbox Code Playgroud)
您的代码仅适用于以下极小的值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;
}
Run Code Online (Sandbox Code Playgroud)
一个甚至更简单,更快速的解决方案是:计算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;
}
Run Code Online (Sandbox Code Playgroud)