我們知道,整數做除法時,有時得到有限小數,有時得到無限迴圈小數。
如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。
本題的任務是:在上面的約定下,求整數除法小數點後的第n位開始的3位數。
一行三個整數:a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置(0一行3位數字,表示:a除以b,小數後第n位開始的3位數字。
樣例輸入1
1 8 1
樣例輸出1
樣例輸入2
1 8 3
樣例輸出2
樣例輸入3
282866 999000 6
樣例輸出3
為了輸出除法的每一位,需要做一下遞推,假設被除數和除數分別是a和b,則a/b是他們的整數部分,之後令a = (a%b)*10,可得到下乙個小數字的被除數,a/b為該位的小數字,依次類推。
開乙個map,記錄每次的被除數及其位置,如果要記錄的被除數已經存在,則可判斷這是乙個無限迴圈小數。記錄無限迴圈小數時可使用start記錄迴圈開始位置,len記錄乙個迴圈的長度,當位置index大於等於start時,index位置的小數字等於start+(index-start)%len位置的小數字。
#include#include#includeusing namespace std;
//開始迴圈的位置,迴圈長度,當前位置
int start = -1,len = -1,count = 1;
long long a,b,n;
mapachieved;
vectornumbers;
int main()
achieved[a] = count++;
temp = a/b;
numbers.push_back(temp);
a = (a%b)*10;
} //有限小數
if(start == -1)
}else
} return 0;
}
歷屆試題 小數第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...