6.分数化小数

问题:
输入正整数a, b, c,输出a/b的小数形式,精确到小数点后c位。 a , b ≤ 1 0 6 , c ≤ 100 a, b \le 10^6,c \le 100 a,b106c100。输入包含多组数据,结束标记为 a = b = c = 0 a=b=c=0 a=b=c=0

主要是 double 只有 16 位有效数字。
参考其他博客

解决如下:

#include <stdio.h>
int main()
{
	int a, b, c, tmp, i, t, count = 1;;
	int s[110];//用于保存小数点后的部分
	while (scanf("%d%d%d", &a, &b, &c) != EOF) {
		if (a == 0 && b == 0 && c == 0)
			break;
		t = a / b;
		a = a%b * 10;
		for (i = 1; i<c; i++) {//小数点后前c-1位保存到数组s中
			s[i] = a / b;
			a = a%b * 10;
		}
		tmp = a%b * 10 / b;//tmp是初始a/b的小数点后第c+1位数字
		if (tmp<5)
			s[i] = a / b;//s[i]即s[c]
		else
			s[i] = a / b + 1;
		while (i>1) {
			if (s[i] == 10) {
				s[i] -= 10;
				s[i - 1] += 1;
			}
			i--;
		}
		if (s[1] == 10) {
			s[1] -= 10;
			t++;
		}
		printf("Case %d:%d.", count++, t);
		for (i = 1; i <= c; i++)
			printf("%d", s[i]);
		printf("\n");
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值