算法竞赛入门习题2-5

算法竞赛入门习题2-5

习题描述:“输入正整数 a, b, c,输出a/b的小数形式,精确到小数点后c位。a, b<= 10^6, c<=100。输入包含多组数据,结束标记为 a=b=c=0。”

样例输入:

1 6 4
0 0 0

样例输出:

Case 1: 0.1667

 

思路:这道题主要要注意的是小数的位数需要人工输入,就是模拟保留小数位的过程,具体的思路是先输出整数位和小数点,小数位则通过上一次除后的所得余数再除除数依次类推,到最后一位时要根据下一位的数值来判断是否进位。

这里选择题目的样例1/6,输出至小数点后4位数,先求出他们的商,既1÷6=0······1。商为0余数为1。那么此时就打印出”0.”来。此时应该算小数点后一位,所以余数1应该乘10为10,10÷6=1······4。商为1余数为4。此时打印出来“1”来。则输出结果为“0.1”。再算小数点后2位:40÷6=6······4,商为6余数为4。此时打印出“6”。输出结果为“0.16”。以此类推,输出界面输出结果为“0.1666”。此时就有四位小数,但是还要检查最后一位是否为四舍五入。再次计算十万分位,发现商为6,那么万分位就要进一。最后结果为“0.1667”。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,c;
	while(cin>>a>>b>>c)
	{
		if(a==0&&b==0&&c==0)
			break;
		else
		printf("%d.",a/b);//打印整数部分 
		for(int i=1;i<c;i++)
		{
			a=(a%b)*10;
			printf("%d",a/b);//打印至第c-1位 
		}
		a=(a%b)*10;//第c位 
		c=(a%b)*10;//第c+1位 
		if(c>4)//判断要不要四舍五入 
		{
			printf("%d\n",(a/b)+1);
		}
		else
		{
			printf("%d\n",a/b);
		}
	}
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还差一颗草莓呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值