问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言问题 1*2*3*...*1000结果是一个很大的数,求这个数末尾有多少个连续的零。

发布网友 发布时间:2022-05-12 04:21

我来回答

5个回答

热心网友 时间:2023-11-12 03:08

零是由2和5相乘得到的,你只要求出1000!里面包含多少了5就行了,因为2的个数是肯定比5多的,所以有多少个5数末就有多少连续的0.
代码
#include <stdio.h>
#include <stdlib.h>

int f(int n)//求n!里面包含多少个因子5
{
if (n < 5) return 0;
return n / 5 + f(n / 5);
}

int main()
{
printf("%d\n", f(1000));
system("pause");
return 0;
}
f(1000)即为所求299个
大概解释一下
1 * 2 * 3 * 4 * 5 * …… * 1000
里面能被5整除的有5,10,15,……,1000
这些数正好是1000 / 5个,剩下的那些数不包含5,但是5,10,15,……,1000 里面还包含5,我们先把他们都除以5,因为都已经算过一个5了,得到
1,2,3,……,200然后用相同的方法递归计算200!里面有多少个5,就这样
-------------------------
数学啊。。。。。。 别说是1000了1亿的阶乘后面有多少个连续0都可以算
如果你对1000!有多少位有兴趣的话,我也可以告诉你^_^

热心网友 时间:2023-11-12 03:08

1开始的自然数到某个数连续相乘,结果最后有多少个0
其实就是看这些数的因子里有多少个5,因为5和2相乘结果就是10
结尾所有的0都是这样形成的,因为2的数量肯定大于5,所以只要计算出
5的个数就可以了

1*2*3*...*1000

可能包含的 含 5 的因子有

5 25 125 625

#include<stdio.h>

int main(void)
{
int i, n = 0;
for (i = 5; i <= 1000; i += 5)
{
n++;
if (i % 25 == 0)
{
n++;
if (i % 125 == 0)
{
n++;
if (i % 625 == 0)
{
n++;
}
}
}
}

printf("%d", n);
}

249

附 1000!的结果

402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

热心网友 时间:2023-11-12 03:08

为了让你更直接的看清楚。代码这样写
#include<stdio.h>
#include<stdlib.h>
main()
{
long int i,n=1,j=0;
printf("%d\n",n);
for(i=1;i<=100;i++){
n=n*i;
printf("%d\t",i);
printf("%d\n",n);
}

while(n%10!=0){
n=n/10;
printf("%d\n",n);
j++;
}

printf("%d",j);
system("pause");
}
你自己运行一下就知道了。其实单乘到100就大的可怕了。你还想乘到1000.
int的范围是有*的,超过了就会出负再超过一定范围就是0。
long int也是有范围*的。。

算法真好。。搬个板凳围观学习

热心网友 时间:2023-11-12 03:09

老实说,这个算法并没有公式,所以就不要想这个问题了,而且就算有,其零的个数,也远远比你的内存的总共的容量还要不知道大多少个0,或者说,不过你的内存是多少GB,只是这个数的零头零头都不到。

一直乘到20,即20!,就已经是个64位整数(long long int)了

热心网友 时间:2023-11-12 03:10

把结果保存在一个变量里·如s。用s%10得到s的最后一位。保存在t中。if(t/1)==0则用i计数i++,else 直接跳出,打映i,否贼去掉最后一位s/10.继续重复上述过程。·
好困,先睡了,自己想的思路应该差不多吧,还请其他兄弟互相指教。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
空调加氟时要注意什么? 电脑安装了pr兼容性pr显示系统兼容性报告 带你了解——赫伯罗特 一千克面粉三十元一克面粉多少钱 大米2元500克面粉3元500克 2千克大米和和1500克面粉多少钱?_百度... ...面粉每千克多少元.大米25千克4.5元一千克面粉2 买8000克面粉需要32元,每千克面粉多少钱 500克面粉2元钱1千克面粉多少钱,怎么练式? 软棕和硬棕哪个好 amd rx6800m相当于nvidia什么水平? 二进制中的10.100.1000在十进制中各是多少? 公司向个人借款摘要怎么写?出纳怎么入账? 试管前检查激素六项,都需要检查什么项目? 雌激素六项检查是哪六项阿?? 想学习oc调用js和h5有什么能看的书吗 雌激素六项检查 怎么鉴别紫罗兰翡翠真假 完美世界手游苹果怎么转安卓 汽车多长时间可以更换机油机滤? 汽车空滤和汽滤多长时间更换一次? iEnglish3学习机怎么转为安卓系统 汉兰达汽滤多久换一次? ios王者荣耀转安卓怎么转 汽车汽油滤芯多久更换一次? 天津换一个劳力士手表玻璃要多少钱 ...老师让写一篇总结,总结这学期的情况,反思,新学期计划,600到800字... 劳力士手表玻璃能换吗 学期后反思小结怎么写 惠普8594e 使用说明 TDS的简介 为什么我所有拍所有照片眼睛都显得很大,本人的眼睛都没这么大呢? 1000hz是指一秒1000次还是一分 1000mcg等于多少 这是本人照片这算眼睛大??会不会有女孩子喜欢。 飞行模式怎么玩王者荣耀 1000毫米汞柱等于多少兆帕 女生照片眼睛非常大又圆 据说是戴了美瞳?不是ps了眼睛? 怎样制作大眼睛照片 ? 1000NM和67.7kgm哪个大 为什么韩国女生拍照片眼睛都那么大?! 去掉0.007的小数点,就是把0.007( )A.扩大1000倍.B.缩小1000倍.C.扩大10000倍. 非主流的图片的女生的眼睛特大,是不是假的,着是她的真实照片吗? HBV—DNA参考值为1000.检验报告单结果是4270000. 要紧吗? 1000的最高位上的计数单位是 找规律写数. 1000 、 900 、 800 、 ___ 、 ___ . 已知数列7.10.13.16.那么1000是数列的多少项? 0.009的计数单位是 1 1000 .___. 光纤传输hdmi信号为什么不稳定 小数乘10.100.1000计算题 打印机驱动下载地址