第1个回答 2012-12-14
#include<stdio.h>
#include<math.h>
main()
{ int a=1;
int b=1,i,m=0;
for(i=0;i<100;i++)
{
a=a*b;
b++; }
while(a%10==0)
{
a=a/10;
m++;
}
printf("%d\n",m);
} 不要设置为double %没法运行 这个是i值取12以内运行正确 超过了a溢出没法计算 了 可以考虑优化算法 每次都除以10再乘 如果是10的倍数就反复除以10 不过就算这样也不能保证不溢出
引用另外的一个回答(本问题下的其他回答)
修改一下就好了:
#include <stdio.h>
int main(int argc, char *argv[])
{ // 计算 n 的阶乘 int n=100; // x 统计因子 2 出现的次数,y 统计因子 5 出现的次数
int x=0,y=0;
int i,t;
for(i=1; i<=25; i++)
{
t = i; while(t%2 == 0)
{
x++; t/=2;
} while(t%5 == 0)
{ y++; t/=5; }
}
printf(" has %d zeros at end!\n", (x<=y ? x : y));
return 0;}
100的运行结果是24 因该是对的吧
第2个回答 2012-12-14
%只能对int型变量操作,想要对double型变量取余数,请
include<math.h>
然后a%10用fmod(a,10)代替
并且最后的printf("%d",&m);应该把'&'这个符号去掉
而且你的程序逻辑也错了,怎么能一边乘一边找0呢,应该等100遍乘完之后再找0本回答被提问者采纳
第3个回答 2012-12-14
double a=1.0;
a%10==0
这里明显存在问题,整形才能求模运算
这个问题用double 可能会存在精度损失,建议你看下长整数乘法,那样是不会有问题的
第4个回答 2012-12-14
冗余。。。。
估计不能算100的阶乘会溢出。
#include <stdio.h>
long fac(int n);
void main()
{
int n;
scanf("%d", &n);
while(n >= 0 && n < 14)
{
printf("%d 的阶乘是: %d\n", n, fac(n));
scanf("%d", &n);
}
}
long fac(int n)
{
register long i, f = 1;
for(i = 1; i <= n; i )
{
f *= i;
}
return f;
}