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