题目描述
给定一个以十进制表示的分数 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;
}