ZeroJudge A248: 新手訓練 ~ 陣列應用

大家都知道,小算盤的小數運算只能算出小數點後三十幾位

但好奇的桑葉想知道更精準的小數值

請你幫可憐的桑葉做出可以算出精準的小數運算的程式

範例測資

範例輸入範例輸出
EOF 輸入,每次輸入有三個正整數 a , b , N
1<= a , b <= 2147483647
1 <= N <= 10000
(輸入不會超過1000筆)
請輸出 a / b 的小數運算結果
精準到小數點後N位
第N位以後請無條件捨去
18467 41 10
26500 6334 10
15724 19169 10
10 5 3
450.4146341463
4.1837701294
0.8202827481
2.000

解題思路

本題如使用cin需先優化避免超時。因為不能使用 Printf 來指令小數點的位數,所以輸出完整數的答案之後要跑N次For迴圈來計算 a/b 之後的小數點位數的值,將 a 與 b 取餘數之後再將 a 乘以 10,同時輸出 a/b。

範例程式碼-ZeroJudge A248: 新手訓練 ~ 陣列應用

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(nullptr);
    int a, b, N;
    while (cin >> a >> b >> N)
    {
        cout << a/b << ".";
        for (int i = 0; i<N; i++)
        {
            a %= b;
            a *= 10;
            cout << a/b;
        }
        cout << "\n";
    }
}

//ZeroJudge A248
//Dr. SeanXD

發佈留言