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」