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

2019-04-13 21:42发布

 题目:输入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 #include 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(" "); } return 0; }