判斷N 階乘中末尾0的個數

2021-07-07 05:17:53 字數 943 閱讀 5126

如果我們要判斷出0的個數,如果我們直接求n!那麼資料會很大,資料可能溢位

那麼為了得到0的個數我們知道可以從10的角度進行判斷,如果我們知道n!中10的個數

我們就可以判斷出0的個數,

如果n!=k*10^n,k是不能被10整除的數,那麼我們可以根據n就可以得到0的個數,

考慮10的個數,我們必須對n!進行質因數的分解,n!=(2^x)*(3^y)(5^z)...........,由於2*5=10,

所以n只與x和z相關,

於是n=min(x,z),我們可以判斷出x的個數必然大於z的個數,因為被2整除的數的頻率大於被5整除的數的頻率高,

所以n=z;

下面我們要判斷出n1中5的個數,

因為n!=n*n-1*n-2*n-3.......................................

所以我們要判斷出5的個數,我們可以對每個n,n-1,n-2,進行判斷,就可以得到5的個數了

判斷5的個數**:

#includeusing namespace std;

int main()

} cout << num << endl;

system("pause");

return 0;

}

我們還可以用另一種方法進行5的個數進行求解:

z=n/5+n/25+n/5^3+....................

知道n/5^k為0;

**:

#includeusing namespace std;

int main()

cout << num << endl;

system("pause");

return 0;

}

N階乘末尾0的個數

輸入乙個正整數n,求n 即階乘 末尾有多少個0?比如 n 10 n 3628800,所以答案為2 輸入為一行,n 1 n 1000 輸出乙個整數,即題目所求要判斷末尾有幾個0就是判斷可以整除幾次10。10的因子有5和2,而在0 9之間5的倍數只有乙個,2的倍數相對較多,所以本題也就轉換成了求n階乘中...

n的階乘末尾含0的個數

本博主曾被問過這樣乙個問題 求n的階乘中末尾含有多少個0。例如n 10,n 3628800,那麼n 末尾有兩個0。直接計算n 的值顯然不合適,因為n 數值太大,很容易溢位。而且這種無腦的計算方式,顯然不適合面試的時候裝nbility拿高薪offer。本博主當時被問這個問題的時候的第一反應就是 要相乘...

n的階乘問題 階乘位數 階乘末尾0的個數

初來乍到,望高手指教!原有解決n的階乘的方式 迭代,如果是大資料的話,迭代會吃掉大量記憶體,導致記憶體溢位 用平時的迭代解決n的階乘問題 在計算21的階乘時,結果已然為負數,超出整型資料表示範圍。計算34的階乘是,結果已然為0 此段 將n的階乘問題解決,實現無限大數的階乘!無限 兩字有點牽強,數字太...