第三節
數學演算法解決
c語言問題
3.1 n!
結果中0的個數 1.
99!結果中後面有多少個0?
誰跟你說過高數沒用?數學是c語言的支撐,沒有數學建模的支撐就沒有那麼經典的c語言演算法!
如果你能乙個乙個乘出來我算你狠!我也佩服你!
0也就意味著乘積是10的倍數,有10的地方就有5.有5就不擔心沒2.10以內能被5整除的只有5,但是能被2整除多的去了。所以就簡化成了這個數只要有乙個因子5就一定對應乙個0.
所以可以得出下面結論:
當0 < n < 5時,f(n!) = 0;
當n >= 5時,f(n!) = k + f(k!), 其中 k = n / 5(取整)。
如程式清單3. 1所示。
程式清單3.
1 求n!中0的個數
#include
int fun(int ivalue)
return isum;
}
int main( int argc , char *argv )
所以99!後面有多少個0的答案是:99 / 5 = 19 , 19 / 5 = 3 ; 3 / 5 = 0 .也就是:19 + 3 + 0 = 22.
這裡延伸為n!呢,一樣的,萬變不離其宗!
3.2 n!
結果中的位數
1.請問
n!結果中有幾位數?
數學!還是數學,數學真的博大精深,如果大學沒有好好學數學,會成為你一輩子的遺憾。
我們先假設:n! = 10 ^a,我們知道 10^1~10^2(不含10^2)之間是2位數,10^2~10^3(不含10^3)之間是3位數,以此類推,10^a~10^(a+1)(不含10^(a+1))則是(a+1)位數,那就是說,我們只要求出a,即可知道n!有幾位數。a=log10(n!),
n!= 1*2*3……*n,那麼a= log10(1)+log10(2)+……+log10(n).
這樣好計算了吧!程式如程式清單6. 2所示。
程式清單6.
2 求n!結果中的位數
#include
#include
int main(int argc, char *argv)
printf(
" n!
有%d位\n", (int)sum + 1 ) ;
return 0;
}我們看下除錯結果:
請輸入inumber :10
n!有7位
請按任意鍵繼續. . .
第三節 資料與編碼
第三節 資料與編碼 一 進製 一 基本概念 數制即表示數值的方法,有非進製數和進製數兩種。在計算機數制中,需要掌握數碼 基數和位權 的概念。數碼 數制中表示基本數值大小的不同數字符號。在一種數制中,只能使用一組固定的符號來表示 數的大小。例如,十進位制有 10 個數碼,分別為 0,1,2,3,4,5...
第三節 資料降維
過濾方差,進行降維 threshold指定要過濾的方差,小於等於即過濾該特徵 var variancethreshold threshold 0.0 data var.fit transform 0,2,0,3 0,1,4,3 0,1,1,3 print data if name main var ...
筆記 C語言 第三節 迴圈結構
while語句的語法格式 while 條件表示式 當條件表示式為真時,反覆執行語句,當條件表示式為假時,跳過語句的執行,執行while語句下面的 思路 1 需要乙個迴圈增量,來讓數字累加起來,並且作為內容來判斷是否是7的倍數。2 採用while迴圈,來實現整個過程。用while列印出1 100之間不...