分数化小数(模拟除法操作)

 题目:输入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;
}

猜你喜欢

转载自blog.csdn.net/qq_41818544/article/details/82347809