問題描述
我們知道,整數做除法時,有時得到有限小數,有時得到無限迴圈小數。
如果我們把有限小數的末尾加上無限多個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...