结论:
0.6(6循环)= 6 / 9;
0.56(56循环) = 56 / 99;
0.456(56循环) = (56 + 4 * 99) / 99,然后再除以10,约分即可 ———(写成4.56,然后结果除以10)
思路:
把不循环的部分存成一个数,循环的部分存成一个数,然后约分即可。
代码:
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
#define int long long
int n, m, k;
int T;
string s;
signed main()
{
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> s >> n;
int t = s.size();
int x = 0, f = 0, cnt = 0;
for(int i = 0; i < t - n; i ++) //不循环的部分存成一个数
{
if(s[i]=='.')
{
f = 1;
continue;
}
x = x * 10 + (s[i] - '0');
if(f) cnt ++; //cnt用来记录最后结果要除以几个 10 。
}
int mu = 0, zi = 0;
for (int i = t - n; i < t; i++) //循环的部分存成一个数
{
zi = zi*10 + (s[i] - '0');
mu = mu*10 + 9;
}
zi = x * mu + zi;
mu = mu * pow(10, cnt);
int z = __gcd(zi, mu);
cout << zi/z << "/" << mu/z;
return 0;
}