【发布时间】:2019-09-25 06:30:30
【问题描述】:
我已返回代码以查找阶乘并在阶乘末尾显示尾随零,但输出错误...您能帮我找出错误吗?
#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;
}
【问题讨论】:
-
这不是任务假设的方法。天真的在这里不会很好用,你需要考虑一个非平凡的算法。至于你的问题 - 你可能只是溢出整数。
-
如果您还可以告诉我们您尝试了哪些输入以及收到了哪些结果,那就太好了。该错误可能是由许多事情引起的。编辑:当然有更简单的方法来做到这一点@EugeneSh。表示。把它想象成一个乘法。是什么导致你的结果最后是 0?
-
你应该考虑另一种逻辑,因为我认为方法不对。
-
要做到这一点而不会溢出,您只需计算每次乘以 5,例如 25! 25 乘以 5 两次,15、10 和 5 各乘一次。所以会有 5 个尾随零(注意有多余的 2 的倍数,将 5 变成 10 的倍数)
-
@AndrewHenle 您只能通过 5 * 2 获得十的倍数,而 10 的倍数是获得尾随零的唯一方法。