8个回答
展开全部
#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了,基于这个原理就可以实现统计了。
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();
}
展开全部
先说算法,,有多少个零取决于有多少个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");
}
应该是这样吧,临时弄的,,满意请采纳,有问题请追问
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"改成试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我以为抢不到最佳了,不过看了前两位的答案我还是写一下吧……
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*
** 最简单的程序来了,请验证!
*/
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
祝你学习进步
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……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询