藍橋杯 演算法訓練 多階乘計算

2021-10-22 08:03:50 字數 1553 閱讀 7774

問題描述

我們知道,階乘n!表示n*

(n-1)*

(n-2)*

......*2

*1, 類似的,可以定義多階乘計算,

例如:5!!=5*

3*1,依次可以有n!

...!

(k個『!』,可以簡單表示為n

(k)!

)=n*

(n-k)

*(n-

2k)*

....(直到最後乙個數<=

0)。  現給定一組資料n、k、m,當m=

1時,計算並輸出n(1

)!+n

(2)!

+...

...+

n(k)

!的值,m=

2時計算並輸出n(1

)!+n

(2)!

+...

...+

n(k)

!的各個位上的數字之和。

輸入格式

兩行,第一行為n和k,第二行為m。

輸出格式

一行,為n(

1)!+

n(2)

!+......+n

(k)!

的值或n(1

)!+n

(2)!

+...

...+

n(k)

!的各個位上的數字之和。

樣例輸入51

2樣例輸出

3資料規模和約定

0< k < n <=

20

題幹中的問題:

m=1時,計算並輸出n(1)!+n(2)!+…+n(k)!的值,m=2時計算並輸出n(1)!+n(2)!+…+n(k)!的各個位上的數字之和。

解題思路:

第一步:看題目,多階乘結算是什麼意思.

看題目舉例:

5!!=5 * 3 * 1,依次可以有n!..!(k個『!』,可以簡單表示為n(k)!)=n*(n-k)(n-2k)…(直到最後乙個數<=0)

意思是:!號的個數就是k的個數,k等於多少就是n的階乘之間隔k個數的乘積,比如5!!的結果就是5的階乘之間隔2.

第二步:用兩個巢狀for迴圈,外層迴圈控制k,求n(1)!,n(2)!,…,n(k)!的值.

內層迴圈求n(k)!(k=1…k)的值,最後全部相加為sum,結果就是m=1的結果.

m=2的結果就是各個位上的數字之和;比如sum=120.則m=2的結果是3.

#include

intmain()

sum+

=t;}

if(m==1)

else

printf

("%d"

,sum1);}

return0;

}

(藍橋杯)演算法訓練 階乘

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

藍橋杯 演算法訓練 階乘

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

藍橋杯 演算法訓練 階乘末尾

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定n和len,輸出n 末尾len位。輸入格式 一行兩個正整數n和len。輸出格式 一行乙個字串,表示答案。長度不足用前置零補全。樣例輸入 6 5樣例輸出 00720 資料規模和約定 n 30,len 10。思路 輸入正整數n和le...