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 展开
一个非零整数N,求N!末尾有多少0。
输入
输入第一行T为正整数测试数据数量,范围属于[1,4294967295] 接下来有T行测试,每行一个非零整数N,范围属于[0,4294967295]
输出
每个测试输出一个结果,每行一个。
样例输入
3
2
5
6
样例输出
0
1
1 展开
6个回答
展开全部
楼主你好
具体代码如下:
#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
希望能帮助你哈
具体代码如下:
#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
希望能帮助你哈
追问
不对啊,数字大了不行,我的方法也是数字大了不行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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,
。。。
所以。。。
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,
。。。
所以。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
求一个数的阶乘后面有几个零 ?数字比较大。一个整型最大值了,系统的栈区肯定不够用
你可以在堆区分配空间 。懂不? malloc(sizeof(int) * N);你要多大的空间都可以申请,能得到多大的空间取决于你的内存。
这样做就能解决你的问题了
你可以在堆区分配空间 。懂不? malloc(sizeof(int) * N);你要多大的空间都可以申请,能得到多大的空间取决于你的内存。
这样做就能解决你的问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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
////极限优化版!!!
#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
////极限优化版!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好说好说,分数我收了 哈哈!!!
#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;
}
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询