紧急!!!C语言求1*2*3*…*n的积的末尾有多少个0!很紧急!!可追加悬赏!

一定是C编程!!!其他的就不要水了!紧急!谢谢!!... 一定是C编程!!!其他的就不要水了!紧急!谢谢!! 展开
 我来答
laohu2862
推荐于2016-12-01 · TA获得超过1246个赞
知道小有建树答主
回答量:557
采纳率:0%
帮助的人:651万
展开全部
#include<stdio.h>
void main()
{
int i,cnt,num;
printf("请输入你需要用于阶乘的N:\n");
scanf("%d",&i);
num = 1;
while(i>0)
{
num = num*i;
i--;
}
cnt = 0;
printf("阶乘结果为:%d\n",num);
while(num%10 == 0)
{
cnt++;
num = num/10;
}
printf("末尾0的个数为:%d\n",cnt);
getch();
}

上面的算法就比较基础了,首先计算出阶乘结果,然后为0的话,肯定除以10余数为0了,基于这个原理就可以实现统计了。
追问
为什么执行的时候不管输入哪个阶乘都会说,结果为1,末尾为0的个数为0?
追答
再试试这段代码吧,。刚那应该是结果溢出了。

#include
void main()
{
int i,cntA,cntB,num,tnum;
printf("请输入你需要用于阶乘的N:\n");
scanf("%d",&i);
num = i;
cntA = 0;
cntB = 0;
for(num=1;num cntB)
{
cntA = cntB;
}
printf("共有0个数:%d\n",cntA);
getch();
}
bettle_c
2013-05-06 · TA获得超过758个赞
知道小有建树答主
回答量:363
采纳率:0%
帮助的人:243万
展开全部
先说算法,,有多少个零取决于有多少个5和10,,也就是我们只要算有多少个五和十就行了,
1到10有一个5和一个10,也就是两个零,每十个数相乘就两个零出来,,,程序如下
#include "stdio.h"
#include "stdlib.h"
void main()
{
int count=1;
printf("请输入数字n");
int n;
scanf("%d",&n);
while(n>=10)
{
count+=2;
n=n-10;
}
if(n>=5)
count++;
printf("有%d个零",count);

system("pause");
}
应该是这样吧,临时弄的,,满意请采纳,有问题请追问
追问
调试的时候说,error C2143: syntax error : missing ';' before 'type'为什么啊
追答
把前面的"stdio.h"和"stdlib.h"改成试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ry_x
2013-05-06 · TA获得超过941个赞
知道小有建树答主
回答量:1095
采纳率:0%
帮助的人:737万
展开全部

我以为抢不到最佳了,不过看了前两位的答案我还是写一下吧……

10=2*5,因此我们统计n!这个数中因子2和因子5的个数,取两者较小的即为答案。

改成.c的文件就行...

追问
可否说一下如何执行呢?
追答
对不起我犯了个严重错误,马上改……
这个是正解:
//输入n,输出答案
#include
int main()
{
int cnt_2 = 0, cnt_5 = 0;
int n, i, j;
int ans;
scanf("%d", &n); // calculate n!
for (i = 1; i <= n; i++)
{
j = i;
while (j % 5 == 0)
j /= 5, cnt_5++;
while (j % 2 == 0)
j /= 2, cnt_2++;
}
if (cnt_2 < cnt_5)
ans = cnt_2;
else
ans = cnt_5;
printf("%d\n", ans);

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
FanyongYin
2013-05-06 · TA获得超过1054个赞
知道小有建树答主
回答量:1298
采纳率:100%
帮助的人:1017万
展开全部
/*
** 最简单的程序来了,请验证!
*/
#include<stdio.h>
int main(void)
{
    long n = 0;
    long tmp = 0;
    long total = 0;
    printf("\nInput n: ");
    scanf("%ld", &n);
    tmp = n / 10;
    if (tmp * 10 + 5 <= n)
    {
        ++total;   
    }
    total += tmp << 1;
    printf("Total = %ld\n", total);
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
健哥拙论
2013-05-06 · TA获得超过186个赞
知道小有建树答主
回答量:181
采纳率:50%
帮助的人:91.8万
展开全部
#include<stdio.h>
int main()
{
int n,i,num=0,s=1;
printf("请输入n:");
scanf("%d",&n);
for(i=2;i<=n;i++)
{
s=s*i;
}
while(s>=10)
{
if(s%10==0)
num++;
s=s/10;
}
printf("1*2*3*……*n的积的末尾有%d个0\n",num);
return 0;
}

祝你学习进步
更多追问追答
追问
谢谢!可是执行的时候无论输入什么都是末尾为0的个数为0是为什么?可能是我不会执行?能告诉我执行的时候怎么操作吗?
追答
不是吧,我刚才调试了的,输入5有一个0,输入10有2个0……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式