本文目錄一覽:
如何用C++編程階乘尾數零的個數,N!末尾有多少個零
為了解決這個問題,必須首先從數學上分析在N!結果值的末尾產生零的條件。不難看出:一個整數若含有一個因子5,則必然會在求N!時產生一個零。因此問題轉化為求1到N這N個整數中包含了多少個因子5。若整數N能被25整除,則N包含2個因子5;若整數N能被5整除,則N包含1
個因子5。
*程序說明與注釋
#include
using
namespace
std;
int
main()
{
long
a,count
=0;
for(a=5;a=N;a+=5)
//循環從5開始,以5的倍數為步長,考察整數
{
++count;
//若為5的倍數,計數器加1
if(!(a%25))
++count;
//若為25的倍數,計數器再加1
}
cout”The
number
of
in
the
end
of
N!
is:”
return
0;
}
C語言編程題(階乘+尾數幾個零)
#includestdio.h
void main()
{
int b,n;
int temp[20];
int i=2,j=0,k;
int yinziNum[20];
cout”請輸入一個進位數和一個整數:”endl;
cinbn;
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]==0i!=0)
{yinziNum[k]++;
i=i/temp[k];}
min=yinziNum[0];
for(i=1;ik;i++)
if(yinziNum[i]min)
min=yinziNum[i];
coutb”進位數”n”的階乘末尾共有”min”個零!”endl;
}
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
C語言編程求100的階乖,末尾有多少個零
以C語言的數據類型來求100的階乘不造成數據過大溢出是不現實的,所以不能在求得100的階乘之後再數它末尾有多少個0,只能在累乘的過程中遇到一個0就幹掉,最後數總共幹掉了多少個,至於由於溢出前面丟掉了多少位的數就管不了了,代碼如下:main()
{
long
a=1;
int
i,n=0;
for(i=2;i=100;i++)
{
a*=i;
if(a10000)a=a%10000;
/*只要末幾位不變對乘法結果的末幾位就沒有影響,所以在此限定a不要過大*/
loop1:
if(a10a%10==0){a/=10;n++;goto
loop1;}
/*為了防止十位也是0,所以返回來再判斷一次*/
}
printf(“%d\n”,n);
}結果是24
原創文章,作者:XDOY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147159.html