close
最近在阿倫各版上面真是有文學氣息呀~(茶)
小月仔提供題目:
寫出一個function求出n!後面的連續"0"個數,(int n為此function的參數)
例如n=6, 6!=720 , 後面有1個連續的0,所以output為1。
寫出下面這樣的程式:
Created with colorer-take5 library. Type 'c' /* 本程式用來計算在 n! 後面共有幾個0 例如 6! = 720 那就是1個0 不討論負數!! */ #include <stdio.h> #include <math.h> int how_many_0(int n); double log_a_x(float a, float x); int main() { int n; for(;;) { printf("Please input a number: "); scanf("%d", &n); printf(" There are %d 0s after %d!\n\n", how_many_0(n), n); } return 0; } int how_many_0(int n) { if(n >= 5) { return n/5 + log_a_x(5, n) - 1; } else { return 0; } } double log_a_x(float a, float x) { return log(x)/log(a); }
程式簡單來說,就是:
如果n>5的話
那答案就是 n/5 + log5n - 1
如果n是0~4的話
答案就是0
就像桃子角(我同學)所說:
因為10=2*5 但2的數量一定比5多 所以算5
只有乘上10才會多產生一個0
所以我們就先看
把n!所有乘起來的數字中,每5個一數
就知道至少有幾個5 (n/5)
然後再看那些5的次方的數字,例如5、25、125、625、3125......等等
分別是5的1次、2次、3次、4次... (+ log5n)
但因為在最前面"至少有幾個5"中,已經各算過一次了
所以就要在扣1 (- 1)
恩...以上是說明不清的解說XD
b.t.w.
log_a_x()是以a為底的log x
因為學過的數學忘記了
所以還上網去查了一下
全站熱搜
留言列表