歷屆試題 小數n位

2021-09-12 06:46:13 字數 882 閱讀 9523

問題描述

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

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

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

輸入格式

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

; scanf("%d%d%d",&a,&b,&n);

a=a%b;t=a;

i=0;

dowhile(a!=t&&a!=0&&i<99);

if(a==0)//不是迴圈小數

if(a==t)//證明a/b是無限迴圈小數

else//無限不迴圈小數

while(--n)

while(j--)

return 0;

}其實這大題目可以用暴力解題,但是只要20分,**就不給大家了,後來參考了一下,原來需要分三種情況:無限迴圈小數、無線不迴圈小數和 有限小數。如果不對無限小數進行優化,就會導致超時。

首先那麼我們要怎樣對無限小數的獲取進行優化呢?第一步,先確定是無限迴圈小數還是無限不迴圈小數。

我們可以用取餘並且乘以10的方式,將那個小數點的後乙個數取出來存放在陣列中,當發現重複小數點的後乙個數與一開始做運算是的數(a%b)相同,說明第一次迴圈結束,那麼我們就可以知道這是乙個無限迴圈小數。否則就是無限不迴圈小數。(題目中用陣列下表超過98作為判斷,畢竟我們沒必要這樣算出來。)確定了是無限迴圈小數之後,我們接著要做的就是定位迴圈節(temp[(n-1)%i],temp[((n-1)%i+1)%i],temp[((n-1)%i+2)%i])),知道迴圈節的規律之後就很快確定是哪個數了。

歷屆試題 小數第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是所求的小數後位...