(0.01,0.99)内的一个小数a,求一个真分数n/m。该分母不大于200,他是所有分母不大于200的真分数中,最接近a值的真分数。输入a输出[n,m]。C++
时间: 2024-03-23 16:43:12 浏览: 91
以下是C++代码实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a;
cin >> a;
int m = 1, n = 0;
double min_diff = 1;
for (int i = 1; i <= 200; i++) {
int j = round(a * i);
double diff = fabs((double) j / i - a);
if (diff < min_diff) {
min_diff = diff;
m = i;
n = j;
}
}
cout << "[" << n << "," << m << "]" << endl;
return 0;
}
```
首先输入小数a,然后从分母1开始遍历到200。对于每个分母i,计算a乘以i的四舍五入值j,然后计算j/i与a之间的差值。如果这个差值比之前所有分母的差值都小,就更新最小差值和分子分母n、m的值。最后输出[n, m]即可。
注意在计算j/i与a之间的差值时,需要将j转换为double类型,否则可能会因为整除而产生误差。同时要使用fabs函数求绝对值,因为差值可能为负数。
阅读全文