最近在阿倫各版上面真是有文學氣息呀~(茶)

小月仔提供題目:

寫出一個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

因為學過的數學忘記了

所以還上網去查了一下

在這個網站看到了解答

arrow
arrow
    全站熱搜

    方格子 發表在 痞客邦 留言(0) 人氣()