输入正整数a ,b ,c ,输出a /b 的小数形式,精确到小数点后c 位。a ,b ≤106 ,c≤100。输入包含多组数据,结束标记为a =b =c =0。
样例输入:
1 6 4
0 0 0
样例输出:
Case 1: 0.1667
计算机运算是无法限定指定保留数位的
具体计算机除法的实现可以参考这本书《计算机组成与设计(硬件软件接口)》的第三章部分
这道题我们采用一步步模拟手算除法的方式解决
#include<stdio.h>
int main(){
int a,b,c,count=1;
while(scanf("%d%d%d",&a,&b,&c)==3){
if(a==0&&b==0&&c==0)
break;
//获取整数部分,可理解为手算除法的写商
int integer=a/b;
printf("Case %d:%d.",count++,integer);
//获取余数部分,可理解为手算除法的写余数
a%=b;
int i=1;
//从i=1到i=c-1,进行小数点后c-1次运算,算得c-1个小数位
while(i++<c){
//余数乘十,继续往后算
a*=10;
printf("%d",a/b);
a%=b;
}
//考虑到第c+1位四舍五入得需要,最后一位第c位进行单独处理
a*=10;
printf("%d",((((a%b)*10/b)>5)?(a/b+1):(a/b)));
}
return 0;
}