我們知道,整數做除法時,有時得到有限小數,有時得到無限迴圈小數。
如果我們把有限小數的末尾加上無限多個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 1000view codevoid
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
");}
#includeusingnamespace
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...