藍橋杯歷屆試題 小數第n位

2021-10-04 19:34:57 字數 941 閱讀 6771

問題描述

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

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

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

輸入格式

一行三個整數:a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置(0求a/b小數點第n位後的三位數字,最直接的思想就是求(a*10^n%b)*100/b

這裡我們統一拿a=1,b=7舉例

其中(a*10^n%b)的作用便是將小數點向後移n位(當n為1時,1/7=0.142857…;(1*10^1%7)/7=(10%7)/7=3/7=0.42857),其次進行**%b**運算的原因:一是結果會爆表,二是我們也不需要整數部分的數字

可是n取值範圍太大了,一步是不可能完成的,那麼我們可以分步化解

假設n取值是15,我們可以先將小數點向後移10位(原因是最大只能每次移10位,如果是11位,那麼a*1e11的結果可能會溢位long long的取值範圍),同時將n-=10;直到n<10為止,此時我們就能牛刀小試地把它算出來了!

**如下:

#include

#include

using

namespace std;

intmain()

a *=pow

(10.0

, n -1)

; a %

= b;

for(

int i =

0; i <3;

++i)

return0;

}

題目傳送門:藍橋杯歷屆試題 小數第n位

歷屆試題 小數第n位 藍橋杯

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

藍橋杯 歷屆試題 小數第n位

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

藍橋杯 歷屆試題 小數第n位

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