c语言编程:100!的尾数有多少个零

答案来自:http://www.ithao123.com/beginner/10007.html
*问题分析与算法设计
可以设想:先求出100!的值,然后数一下末尾有多少个零。事实上,与上题一样,由于计算机所能表示的整数范围有限,这是不可能的。
为了解决这个问题,必须首先从数学上分析在100!结果值的末尾产生零的条件。不难看出:一个整数若含有一个因子5,则必然会在求100!时产生一个零。因此问题转化为求1到100这100个整数中包含了多少个因子5。若整数N能被25整除,则N包含2个因子5;若整数N能被5整除,则N包含1个因子5。
*程序说明与注释
#include

int
main()
{
int
a,count
=0;
for(a=5;a<=100;a+=5)
//循环从5开始,以5的倍数为步长,考察整数
{
++count;
//若为5的倍数,计数器加1
if(!(a%25))
++count;
//若为25的倍数,计数器再加1
}
printf("The
number
of
0
in
the
end
of
100!
is:
%d.\n",count);
//打印结果
return
0;
}
*运行结果
The
number
of
0
in
the
end
of
100!
is:
24.

⑵ C语言编程题(阶乘+尾数几个零)

#include<stdio.h>
void main()
{
int b,n;
int temp[20];
int i=2,j=0,k;
int yinziNum[20];
cout<<"请输入一个进制数和一个整数:"<<endl;
cin>>b>>n;
if(b%2==0)
while(b%i==0)
{
while(b%i==0)
{temp[j]=i;
b=b/i;}
i++;
if(b%i==0)
j++;
}
for(i=2;i<=n;i++)
for(k=0;k<=j;k++)
while(i%temp[k]==0&&i!=0)
{yinziNum[k]++;
i=i/temp[k];}
min=yinziNum[0];
for(i=1;i<k;i++)
if(yinziNum[i]<min)
min=yinziNum[i];
cout<<b<<"进制数"<<n<<"的阶乘末尾共有"<<min<<"个零!"<<endl;
}

⑶ c语言求阶乘尾数 如图 求解错在哪

因为n永远比i大,循环会一直做到数据溢出。换个变量来存或者比较。

⑷ c语言中怎么得到任意整数的阶乘末尾的0的个数

iamxujian的已经不错了,如果把long 改成unsigned __int64支持的范围能更大
恩恩,程序差不多了 ,我就给你说下这个算法的原理:
如果想在末尾凑成个0 那么就相当于乘以个10 而10可以分解为2x5
所以说只要把N!因子2的个数和5的个数计算出来,取少的就是结果

因为在1 2 .....N中 偶数的个数肯定比5的倍数多,所以只要求出N!最多可以表示为5的多少次方。。。就是答案

首先找到1 2 .....N中可以被一个5整除的数的个数,是N/5,存到ret里

然后再找1 2 .....N中可以被25整除数的个数,是N/25,加到ret里(除以25是因为序列里可能存在25的倍数,而上一步只统计了5的倍数,这样就会漏掉一些5)

然后再找1 2 .....N中可以被125整除数的个数,是N/125,加到ret里(除以125是因为序列里可能存在125的倍数,而上一步只统计了25的倍数,这样就会漏掉一些5)
...
.
.
直到five大于N,循环结束,

返回的ret就是结果

⑸ C语言 关于文件末尾

你执行完while里面的东西后再到while的判断函数里面去的
就是说执行完FileLength++;后再执行!feof(ifp)。只内有当!feof(ifp)不满足的容时候才跳出while,这时候统计的个数已经多加了1了,不多加是没办法跳出来的。

⑹ 什么数是C语言尾数

你可以网络一下,这个尾数呢,c语言中采用了科学计数法,

(浮点)数值 = 尾数 × 底数 ^ 指数
六万万 = 6.019 × 10 ^ 8

⑺ C语言 求尾数

main()
{int i,j,m=0,n;
scanf("%d",&n);
for (i=0;i<=n;i+=5)
{j=i;
while ((j%5==0)&&(j>0))
{ j/=5;m++;}
}
printf("%d",m);
}

⑻ c语言程序,求1000!尾数有多少个0,求大神解答

看能从所有数里找出多少个2x5相乘的配对了。
main()
{

int i,j,k;
int num2=0; // 与2相乘的次数

int num5=0; // 与5相乘的次数

for(i=1;i<=1000;i++)
{
j=i;

while((j%2)==0) // 对每个数分解,看包含多少个2

{
num2++;
j=j/2;

}
j=i;

while((j%5)==0) // 对每个数分解,看包含多少个5

{
num5++;
j=j/5;

}

}
printf("%d\n",(num2>num5?num5:num2)); // 找出2和5相乘次数少的,就是多少个2x5的对,就有多少个0

}

运算结果:249

⑼ c语言中怎么求一个数的尾数

假设你输入的是整数 那这个数的个位数就是 X%10
你说的是求位数?
假设你输入的是整数 用这个数不断的除10 然后每除一次i就加一 直到为除到零 然后i就是这个数的位数啦

⑽ 怎么用c语言输出许多串数字让他的尾数都不一样

尾数是多少位?
直接在后面追加顺序的数字即可
for(int i=0; i<1000; i++)
sprintf(target_str[i], "%s%03d",origin_str[i], i);
origin_str保存原来的数字串例如 “239871923570”
target_str会在后面追加 “239871923570000”一直到 “239871923570999”