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