测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题