歷屆試題 小數第n位 (模擬)

問題描述

  我們知道,整數做除法時,有時得到有限小數,有時得到無限循環小數。
  如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。


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

輸入格式

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

輸出格式

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

樣例輸入

1 8 1

樣例輸出

125

樣例輸入

1 8 3

樣例輸出

500

樣例輸入

282866 999000 6

樣例輸出

914

 

思路:模擬手算的一個過程,而不是直接求他的餘數。如果代碼看不懂,可以再旁邊寫手寫一個算式,跟着模擬就懂了。注意,非常關鍵的一點是注意要把循環數去掉。

代碼:

///模擬手算的過程
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
    int a,b,n;
    int sa;
    cin>>a>>b>>n;
    sa=a%b;
    for (int i=1;i<=n;i++)
    {
        sa=sa%b*10;  ///餘數
        if(sa%b==a%b)  ///關鍵,不加會超時,循環數去掉
            n=n%i,i=0;
    }
    for (int i = 0; i < 3; i++)
    {
        cout<<(sa/b);
        sa=sa%b*10;  ///下一位,商數
    }
    cout<<endl;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章