分数化小数c++

题目描述

给定一个以十进制表示的分数 a/ba/b,保证 a<ba<b,请将它化成一个二进制的小数。若存在循环节,用圆括号表示循环节。例如:

1/4=0.017/8=0.111

7/8=0.111

1/5=0.(0011)1/5

输入格式

两个整数:表示 aa 与 bb。

输出格式

一串数字:表示 a/ba/b 的二进制小数表示。

样例
输入数据 1 4

输出数据 0.01

#include<bits/stdc++.h>
using namespace std;
int a, b;
int main()
{
	cin >> a >> b;
	cout << "0.";
	//化简,因为只针对二进制,对2进行化简即可
	while (a % 2 == 0 && b % 2 == 0)
	{
		a /= 2;
		b /= 2;
	}
	//把b变成奇数
	while (b % 2 == 0 && a > 0)
	{
		b /= 2;
		cout << a / b;
		a = a % b;
	}
	//输出循环节
	if (a > 0)
	{
		cout << "(";
		int p = a;
		while (1)
		{
			a *= 2;
			cout << a / b;
			a %= b;
			//当a等于循环节开始的a,则循环节结束
			if (a == p) break;
		}
		cout << ")";
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值