藍橋杯備賽 演算法訓練P0505 階乘問題c

2021-09-11 19:14:27 字數 869 閱讀 1558

乙個整數n的階乘可以寫成n!,它表示從1到n這n個整數的乘積。階乘的增長速度非常快,例如,13!就已經比較大了,已經無法存放在乙個整型變數中;而35!就更大了,它已經無法存放在乙個浮點型變數中。因此,當n比較大時,去計算n!是非常困難的。幸運的是,在本題中,我們的任務不是去計算n!,而是去計算n!最右邊的那個非0的數字是多少。例如,5!=12345=120,因此5!最右邊的那個非0的數字是2。再如,7!=5040,因此7!最右邊的那個非0的數字是4。再如,15!= 1307674368000,因此15!最右邊的那個非0的數字是8。請編寫乙個程式,輸入乙個整數n(0個人分析:

while

(res%

10==0)

因為題目要求的是得到最右邊非零的數,除以10取整就是去掉右邊的0。例如660滿足對10取餘等於0, 就執行660/10=66實現了去掉右邊的0。然後每次對1000取餘是因為階乘的增長速度很快,所以通過這個操作將其控制在三位數。例如666888取餘就是888。因為只需要最右邊的非零值,所以這個操作不會影響結果

然後我測試了一下對100取餘只能得90分 對1000和10000取余是滿分100

res%

=1000

;

實現了將每次階乘後的結果保留在3位

具體**如下:

ac

#include

using namespace std;

intmain()

res%

=1000;}

cout<10

}

學如逆水行舟,不進則退

藍橋杯 演算法訓練 P0505

時間限制 1.0s 記憶體限制 256.0mb 乙個整數n的階乘可以寫成n 它表示從1到n這n個整數的乘積。階乘的增長速度非常快,例如,13!就已經比較大了,已經無法存放在乙個整型變數中 而35!就更大了,它已經無法存放在乙個浮點型變數中。因此,當n比較大時,去計算n 是非常困難的。幸運的是,在本題...

藍橋杯 演算法訓練 P0505

乙個整數n nn的階乘可以寫成n n n 它表示從1到n nn這n nn個整數的乘積。階乘的增長速度非常快,例如,13!就已經比較大了,已經無法存放在乙個整型變數中 而35!就更大了,它已經無法存放在乙個浮點型變數中。因此,當n nn比較大時,去計算n n n 是非常困難的。幸運的是,在本題中,我們...

藍橋杯 演算法訓練 P0505

乙個整數n的階乘可以寫成n 它表示從1到n這n個整數的乘積。階乘的增長速度非常快,例如,13!就已經比較大了,已經無法存放在乙個整型變數中 而35!就更大了,它已經無法存放在乙個浮點型變數中。因此,當n比較大時,去計算n 是非常困難的。幸運的是,在本題中,我們的任務不是去計算n 而是去計算n 最右邊...