1. 程式人生 > >分數化小數(模擬除法操作)

分數化小數(模擬除法操作)

 題目:輸入a, b, c,輸出a/b的小樹形式,精確到小數點後c位。a,b <= 1e6, c <= 100;

        輸出包含多組資料,結束標記為a = b = c = 0.

樣例輸入:1     6     4

                  0     0     0

樣例輸出:0.1667

除法操作就是先取餘再取整。所以我們可以把他分為3個步驟。

  1. 先對整數部分取整,輸出整數和小數點'.';
  2. 再用迴圈進行先取餘、後取整操作。迴圈到c-1位
  3. 第c位單獨輸出。
  4. 還有一個需要注意的地方,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;
}