c语言编程,题目如下

描述一个非零整数N,求N!末尾有多少0。输入输入第一行T为正整数测试数据数量,范围属于[1,4294967295]接下来有T行测试,每行一个非零整数N,范围属于[0,42... 描述
一个非零整数N,求N!末尾有多少0。
输入
输入第一行T为正整数测试数据数量,范围属于[1,4294967295] 接下来有T行测试,每行一个非零整数N,范围属于[0,4294967295]
输出
每个测试输出一个结果,每行一个。
样例输入
3
2
5
6
样例输出
0
1
1
展开
 我来答
未来需努力点缀
2013-02-14 · TA获得超过4679个赞
知道大有可为答主
回答量:850
采纳率:50%
帮助的人:534万
展开全部
楼主你好

具体代码如下:
#include<stdio.h>
#define N 80
int F(int n)//求阶乘n!
{
if(n==1 || n==0)
return 1;
return n*F(n-1);
}
int Count(int n)//求末尾0的个数
{
int count=0;
while(n)
{
if(n%10 == 0)
{
count++;
n/=10;
}
else
break;
}
return count;
}
int main()
{
int n,i;
int a[N];
scanf("%d",&n);
for(i=0 ;i<n ;i++)
{
scanf("%d",a+i);
}
printf("--------------------\n");
for(i=0 ;i<n; i++)
{
printf("%d\n",Count(F(a[i])));
}
return 0;
}

3
2
5
6
--------------------
0
1
1

希望能帮助你哈
追问
  不对啊,数字大了不行,我的方法也是数字大了不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
l521088816
2013-02-14 · TA获得超过1772个赞
知道小有建树答主
回答量:780
采纳率:0%
帮助的人:1064万
展开全部
#include <stdio.h>
void main()
{
unsigned long a,num,sum=0,i,note=0;
printf("输入要阶乘的数\n");
scanf("%lu",&a);
while(a>4)
{
num=0;
for(i=5;i<=a;i*=5)
{
num*=5;
num++;
if(i>=4294967295/5)
{
note=1;
break;
}
}
if(!note)
a-=i/5;
else
{
note=0;
a-=i;
}
sum+=num;
}
printf("0的个数是%d\n",sum);
}

嘻嘻,见过二位的方法了,我的方法是直接看5的次方数
5的1次会带来1个0,
5的2次会带来2个0,
。。。
所以。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
li446729462
2013-02-14 · TA获得超过131个赞
知道小有建树答主
回答量:130
采纳率:100%
帮助的人:90.8万
展开全部
求一个数的阶乘后面有几个零 ?数字比较大。一个整型最大值了,系统的栈区肯定不够用

你可以在堆区分配空间 。懂不? malloc(sizeof(int) * N);你要多大的空间都可以申请,能得到多大的空间取决于你的内存。

这样做就能解决你的问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
enteryourcode
2013-02-14
知道答主
回答量:1
采纳率:0%
帮助的人:1536
展开全部
#define TEST

#define CALC_MOD_VALUE 5

typedef unsigned long COUNT ,DATA ;

COUNT Calc (DATA dtCalc)
{
if (dtCalc < CALC_MOD_VALUE)
return 0 ;

const COUNT ctResult = dtCalc / CALC_MOD_VALUE ;

return ctResult + Calc (ctResult) ;
}

#ifdef TEST

#define INPUT(dtCalc) (printf ("Please Inupt A Data To Caculate (0 To Break) ;\n") ,scanf ("%lu" ,&(dtCalc)))
#define OUTPUT(dtCalc) (printf ("The Result Of Caculating %lu Is %lu ;\n" ,dtCalc ,Calc (dtCalc)))

int main ()
{
DATA dtCalc ;

printf ("The Program Is Used To Count End 0 In A Factorial\n") ;

for (INPUT (dtCalc) ; dtCalc != 0 ; INPUT (dtCalc))
OUTPUT (dtCalc) ;

printf ("You Have Closed The Program\n") ;

return 0 ;
}

#endif

////极限优化版!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
supersoft1000
2013-02-16 · TA获得超过131个赞
知道答主
回答量:198
采纳率:0%
帮助的人:59.9万
展开全部
好说好说,分数我收了 哈哈!!!

#include<stdio.h>
int main(){
_int64 N,T;
scanf("%I64d",&T);
while(T--){
scanf("%I64d",&N);
_int64 ret=0,i,j;
for(i=1;i<=N;i++){
j=i;
while(j%5 == 0){
ret++;
j/=5;
}
}
printf("%I64d\n",ret);
}
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式