100!末尾有多少个0C语言
100ï¼=1*2*3*...*100
ç»æä¸æ«å°¾0ç±ä»¥ä¸ä¸ç§æ åµçæï¼
ï¼1ï¼ä¹ä»¥100ï¼å¾å°2个0ã
ï¼2ï¼ä¹ä»¥10ã20ã30ã40ã60ã70ã80æ90å¾å°1个0ï¼å ±8个0ã
ï¼3ï¼ä¸ä¸ªå¶æ°ä¹ä»¥5å¾å°1个0ï¼å ±æ5ã15ã35ã45ã55ã65ã85ã95ï¼å ±8个0ã
ï¼4ï¼å¶æ°ä¹ä»¥50ä¼å¾å°2个0ã
ï¼5ï¼4ä¹ä»¥25æ75åä¼å¾å°2个0ï¼å ±4个0ã
æ 100!æ«å°¾å ±æ24个0ã
ç®æ³æè¿°ï¼
ä»4!=24å¼å§è®¡ç®ï¼å¦æé¶ä¹å¼æ«å°¾ä¸º0ï¼å°±ææ«å°¾0å»æï¼è®¡æ°å¨å 1ï¼å¦ææ«å°¾ä¸ä¸º0ï¼åªä¿ç个ä½æ°å³å¯ãæååè¿è¡ä¸æ¬¡æ«å°¾0çæ«ææä½ã
Cè¯è¨ç¨åºï¼
#include <stdio.h>
void main()
{
int i;
long f = 24;
int c = 0;
for(i=5; i<=100; i++)
{
f *= i;
if(f%10==0)
{
f /= 10;
c++;
}
else
{
f = f % 10;
}
}
while(f%10 == 0)
{
f = f / 10;
c++;
}
printf("æ«å°¾0çæ»æ°éï¼%d", c);
}
è¿è¡ç»æï¼
æ«å°¾0çæ»æ°éï¼24
ç»æä¸æ«å°¾0ç±ä»¥ä¸ä¸ç§æ åµçæï¼
ï¼1ï¼ä¹ä»¥100ï¼å¾å°2个0ã
ï¼2ï¼ä¹ä»¥10ã20ã30ã40ã60ã70ã80æ90å¾å°1个0ï¼å ±8个0ã
ï¼3ï¼ä¸ä¸ªå¶æ°ä¹ä»¥5å¾å°1个0ï¼å ±æ5ã15ã35ã45ã55ã65ã85ã95ï¼å ±8个0ã
ï¼4ï¼å¶æ°ä¹ä»¥50ä¼å¾å°2个0ã
ï¼5ï¼4ä¹ä»¥25æ75åä¼å¾å°2个0ï¼å ±4个0ã
æ 100!æ«å°¾å ±æ24个0ã
ç®æ³æè¿°ï¼
ä»4!=24å¼å§è®¡ç®ï¼å¦æé¶ä¹å¼æ«å°¾ä¸º0ï¼å°±ææ«å°¾0å»æï¼è®¡æ°å¨å 1ï¼å¦ææ«å°¾ä¸ä¸º0ï¼åªä¿ç个ä½æ°å³å¯ãæååè¿è¡ä¸æ¬¡æ«å°¾0çæ«ææä½ã
Cè¯è¨ç¨åºï¼
#include <stdio.h>
void main()
{
int i;
long f = 24;
int c = 0;
for(i=5; i<=100; i++)
{
f *= i;
if(f%10==0)
{
f /= 10;
c++;
}
else
{
f = f % 10;
}
}
while(f%10 == 0)
{
f = f / 10;
c++;
}
printf("æ«å°¾0çæ»æ°éï¼%d", c);
}
è¿è¡ç»æï¼
æ«å°¾0çæ»æ°éï¼24
温馨提示:答案为网友推荐,仅供参考
第1个回答 2016-05-04
以C语言的数据类型来求100的阶乘不造成数据过大溢出是不现实的,所以不能在求得100的阶乘之后再数它末尾有多少个0,只能在累乘的过程中遇到一个0就干掉,最后数总共干掉了多少个,至于由于溢出前面丢掉了多少位的数就管不了了,代码如下:main()
{
long a=1;
int i,n=0;
for(i=2;i<=100;i++)
{
a*=i;
if(a>10000)a=a%10000; /*只要末几位不变对乘法结果的末几位就没有影响,所以在此限定a不要过大*/
loop1: if(a>10&&a%10==0){a/=10;n++;goto loop1;} /*为了防止十位也是0,所以返回来再判断一次*/
}
printf("%d\n",n);
}结果是24本回答被网友采纳
{
long a=1;
int i,n=0;
for(i=2;i<=100;i++)
{
a*=i;
if(a>10000)a=a%10000; /*只要末几位不变对乘法结果的末几位就没有影响,所以在此限定a不要过大*/
loop1: if(a>10&&a%10==0){a/=10;n++;goto loop1;} /*为了防止十位也是0,所以返回来再判断一次*/
}
printf("%d\n",n);
}结果是24本回答被网友采纳