分數化小數(模擬除法操作)
阿新 • • 發佈:2018-11-08
題目:輸入a, b, c,輸出a/b的小樹形式,精確到小數點後c位。a,b <= 1e6, c <= 100;
輸出包含多組資料,結束標記為a = b = c = 0.
樣例輸入:1 6 4
0 0 0
樣例輸出:0.1667
除法操作就是先取餘再取整。所以我們可以把他分為3個步驟。
- 先對整數部分取整,輸出整數和小數點'.';
- 再用迴圈進行先取餘、後取整操作。迴圈到c-1位
- 第c位單獨輸出。
- 還有一個需要注意的地方,c的範圍小於等於100,但double型別的數最大隻能精確到小數點後15或16位。所以16位之後都為0。單獨判斷最後一位。
#include<cstdio> #include<iostream> using namespace std; int main() { int a, b, c; while(scanf("%d%d%d", &a, &b, &c) != EOF&&(a||b||c)){ printf("%d.", a/b); for(int i = 0; i < c-1; i++){ a = a % b; a = a*10; printf("%d", a/b); } int k = ((a%b*10)%b*10)/b; if(k >= 5) printf("%d", (a%b*10)/b+1); //最後一位四捨五入 else printf("%d", (a%b*10)/b); printf("\n"); } return 0; }