藍橋杯 歷屆試題 小數第n位 迴圈小數的迴圈節

2022-05-02 04:06:08 字數 1976 閱讀 5788

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

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

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

輸入格式

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

一行3位數字,表示:a除以b,小數後第n位開始的3位數字。

樣例輸入

1 8 1

樣例輸出

125樣例輸入

1 8 3

樣例輸出

500樣例輸入

282866 999000 6

樣例輸出

914求乙個分數對應小數的迴圈節。、

思路:我們分別用x和y表示分子和分母,先求出整數部分x div y和餘數部分x mod y,那麼小數部分就是重複將餘數部分乘以10再進行整除運算和求餘運算,直到出現迴圈或餘數為0時結束。

我們不妨從餘數入手,因為小數部分整除的結果是由上一次運算的餘數決定的,如果某一次運算產生的餘數跟前面產生的餘數相同,則說明迴圈開始。

參考**:

#include#define mn 1000

void

main()

printf(

"input :m,n(0<=m"

); scanf(

"%d%d

",&m,&n);

t=0; //

初始化值

r=m; //

把被除數賦給r

while(r!=0&&(p[r]==-1)) //

迴圈條件當r不為0且p[r]=-1時執行迴圈體

printf(

"m/n = 0.

"); //

因為mif (r!=0) //

被除數不為0就執行以下語句

else

//被除數為0的情況

for(i=1;i<=t;i++) //

輸出不迴圈的小數

printf("%d"

,q[i]);

printf("/n

");}

view code

#includeusing

namespace

std;

const

int maxn = (int)2e6+10

;int p[maxn]; //

標記該餘數是否出現,並記錄該餘數是第幾個

int q[maxn]; //

存放小數結果

int loop[maxn]; //

存放迴圈部分

inta, b, n;

intmain()

int len = 0

;

while (rest != 0 && p[rest] == -1)

//若是因為rest==0而退出while迴圈,則被除盡,說明結果不是無限迴圈小數

//若是因為p[rest]!=-1而推出迴圈,則說明出現了重複的餘數,即會一直執行下去,為無限迴圈小數

if (rest == 0)

int len_noloop = p[rest]; //

不迴圈的長度

int len_loop = len - len_noloop;//

迴圈長度=總長度-不迴圈長度

歷屆試題 小數第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...