除法:模拟1/6;
先求整数部分
先商0余1;整数部位就为0。//程序d=a/b;d用来接收整数部位的值。
小数部分
110/6;程序为余数10/除数;程序就为d=a*10/b;
此时再用a储存余数,重复循环直至所需要的位数。
问题:最后一位需要下一位来判断四舍五入的值。
解决:将最后一位单列出来,对其再次进行一次除数操作,判断是否商是否大于5
#include <stdio.h>
int main()
{
int a, b, c;
//版本1
// while(scanf("%d%d%d",&a,&b,&c)!=EOF)
// {
// double n=(double)a/b;
// k++;
// printf("Case %d: %.4lf",k,n);
// }
//
//版本2
scanf("%d%d%d", &a, &b, &c);
int d;
d = a / b; //打印整数部分
printf("%d.", d);
// for (int i = 0; i < c; i++) //打印小数部分
// {
// d = a * 10 / b;//小数一位
// a = a * 10 % b; //取余。
// printf("%d", d);
// }
//问题;最后一位应该根据后一位进行四舍五入。
//版本3
for (int i = 1; i <= c; i++) //打印小数部分
{
d = a * 10 / b;//小数一位
a = a * 10 % b; //取余。
if(i==c)
{
a=a*10/b;//计算第c+1位
if(a>=5)
{
d=d+1;//四舍五入
}
}
printf("%d", d);
}
return 0;
}