求冪的位數,求階乘的位數

2021-10-02 11:54:25 字數 2194 閱讀 3654

筆者總結自己的思路,有以下兩種方法解決求冪的長度,求階乘的長度。從而解決形如

請你計算數a的b次冪共有多少位(十進位制的數)!」

n! (n的階乘) 是非常大的數,計算公式為:n! = n * (n - 1) * (n - 2) * … * 2 * 1)。現在需要知道n!有多少(十進位制)位。」之類的問題。

解決階乘的位數

int

digit

(int n)

//求數n的階乘的長度

解決冪的位數

和解決階乘的位數相似,區別在於兩個變數

int

digit

(int a,

int b)

//求數a的b次冪的長度

解決階乘的位數

題目**

description

n! (n的階乘) 是非常大的數,計算公式為:n! = n * (n - 1) * (n - 2) * … * 2 * 1)。現在需要知道n!有多少(十進位制)位。

input

每行輸入1個正整數n。0 < n < 1000000

output

對於每個n,輸出n!的(十進位制)位數。

sample input13

32000

1000000

sample output11

130271

5565709

思路設定乙個很大的數,在對階乘不斷更新的過程中一旦超過這個數就dui10取餘,同時更新長度,以防止階乘越界。

根據0

< n <

1000000 ,筆者定義int64_t m =

1e10

const

int64_t m =

1e10

;

ac**
#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int64_t sum =1;

const

int m =

1e10

;//設定哨兵

intmain()

sum *

= i;

}while

(sum)

cout

}

解決冪的長度

和上述**下相比只是只改變了一點點、

題目**

description

請你計算數a的b次冪共有多少位(十進位制的數)!

input

輸入資料有多組,每組二個正整數分別為a和b,其中(1<=a<=10000,1<=b<=10000)

output

輸出a^b(a的b次冪)的值共有多少位?

sample input

2 31 1

10 5

sample output11

6ac**

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int64_t sum =1;

const

int m =

1e10

;//計算數a的b次冪共有多少位 其中(1<=a<=10000,1<=b<=10000)

int64_t

getpowlen

(int a,

int b)

sum *

= a;

}while

(sum)

return ans;

}int

main()

筆者認為運用log10()函式更加準確,同時也對算術基本定理有了新的運用。

對於第二種演算法,如果題目給出的n的長度最大為1018,那麼哨兵會爆出int64_t所能表示的範圍,無法儲存哨兵,這類情況第二種方法也無能為力。

求n的階乘的位數

o型血的人大多數是行動派,鄭微更是將這個特徵發揮到了極致。次日上課,阮阮前所未有地發現她在課堂上奮筆疾書,大為驚訝,便湊過去問了一聲,在寫什麼呀?鄭微大大方方地向阮阮展示了她一早上的智慧型結晶,阮阮看了看,俘虜陳孝正詳細行動攻略 她念完,頓時無語。挺漂亮的一本嶄新小本本,上面已經洋洋灑灑地寫了將近十...

T T問題求位數(對數求位數)

t t這個很像乙個流淚的表情是不是!其實,它是t的t次方啦 當t比較大的時候t t會非常大,現在只要你求這個數一共有多少位就可以了。包括多組資料,每組資料為乙個整數 0 剛開始看這道題本來想用python,畢竟python的資料型別轉換起來 比較方便,用快速冪求出該數,並轉換為字串型別,在輸出字串 ...

求n!的位數

用log10 n 1向下取整可以求n的位數,若要求n 的位數,可以用log10 n 1 log10 1 log10 2 log10 3 log10 n 1 向下取整 例 蒜頭君對階乘產生了興趣,他列出了前 10個正整數的階乘以及對應位數的表 nn 位數1 1 1 2 2 1 3 6 1 4 24 2...