思路:就是將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...