試題 歷屆試題 小數第n位

2021-10-08 07:43:42 字數 942 閱讀 8394

思路:就是將a擴大10的n+2次方倍,將a/b的結果變成整數

a*10^(n+2)/b%1000

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

我們知道,整數做除法時,有時得到有限小數,有時得到無限迴圈小數。

如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。

本題的任務是:在上面的約定下,求整數除法小數點後的第n位開始的3位數。

輸入格式

一行三個整數:a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置(0**:

a,b,n =

map(

int,

input()

.split())

mod = b *

1000

t =pow(10

,n+2

)print

(a*t%mod//b)

測試的時候有兩個測試用例超時了,應該是資料量太大的問題。網上看了一下是說求冪的時候超時了。

在網上找了一下,參考了大佬的文章,是用快速冪求解。

大佬的部落格

a,b,n =

map(

int,

input()

.split())

mod = b *

1000

deffun

(a,n)

: result =

1while n:

if n %2!=

0:result *= a%mod

a *= a % mod

n >>=1

return result % mod

print

(a*fun(

10,n+2)

%(mod)

//b)

試題 歷屆試題 小數第n位

題目鏈結 要考慮無限迴圈小數的情況,否則會超時。我們根據經驗可以知道無限迴圈小數中迴圈位數的出現不會太晚,一般不會到50位 覺得不保險可以到500 於是我們可以用兩個陣列,第乙個陣列記錄前50位小數,第二個陣列記錄迴圈位數 從第50位開始,50位我們可以保證迴圈已經開開始 然後根據上面思路模擬出發即...

歷屆試題 小數第n位

問題描述 我們知道,整數做除法時,有時得到有限小數,有時得到無限迴圈小數。如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。本題的任務是 在上面的約定下,求整數除法小數點後的第n位開始的3位數。輸入格式 一行三個整數 a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置 0...

歷屆試題 小數第n位

問題描述 我們知道,整數做除法時,有時得到有限小數,有時得到無限迴圈小數。如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。本題的任務是 在上面的約定下,求整數除法小數點後的第n位開始的3位數。輸入格式 一行三個整數 a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置 0...