A33015. 小数化分数
填空题
较难
知识点
题目描述
小数化分数
题目描述
给出一个小数,求它的最简分数值。循环节用括号表示。
(接下来是一堆介绍小数化分数的知识)
样例
样例输入1
0.125
样例输出1
1/8
样例输入2
0.(3)
样例输出2
1/3
样例输入3
3.(142857)
样例输出3
22/7
参考答案
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int zdgys(int a, int b) {
for (int i = a > b ? a : b; i >= 1; i--) {
if (a % i == 0 && b % i == 0) return i;
}
}
//系统函数 内置函数
int main() {
// char c='1';
// double d = static_cast<double>(a) / b;
// cout << fixed << setprecision(1) << d;
//字符串截取
string x;
cin >> x;
int y;//小数 开始的位置
int len = x.length();
int z_len = 0;//整数长度
int x_len = 0;//小数长度
int zs = 0;//整数部分
int xs = 0;//小数部分
for (int i = 0; i < len; i++) {
if (x[i] == '.') {
z_len = i;
y = i + 1;
break;
}
}
//pow函数,系统函数,用于计算一个数的指数幂(就是几次方)。它的一般语法如下:
for(int i=0;i<z_len;i++){
zs+=pow(10,z_len-i)*(x[i]-'0');
}
// cout << zs << endl;
//求出小数部分
for (int i = y; i < len; i++) {
xs += pow(10, len - i - 1) * (x[i] - '0');
}
// cout << xs << endl;
int b = pow(10, len - y);//分母
int a = xs + zs * b;//分子
int gys = zdgys(a, b);//公约数
// cout << b << endl;
// cout << a << endl;
// cout << gys << endl;
cout<<a/gys<<"/"<<b/gys;
return 0;
}
上一题
下一题