您的位置:首页 > 其它

算法竞赛入门经典第三章3-12 Floating-Point Numbers UVA - 11809

2018-01-04 15:01 459 查看
习题3-12

为避免误差,用打表法做,直接求可能会有一些误差导致wa

https://vjudge.net/problem/UVA-11809

#include<iostream>
#include<string>
#include<cmath>
using namespace std;
double X[15][40];
long long int Z[15][40];
int main() {
string s;
int E, M;
for (M = 0; M <= 9; ++M)
for (E = 1; E <= 30; ++E) {
double k = log10(2)*(pow(2, E) - 1) + log10(1 - pow(2, -M - 1));
Z[M][E] = k;
X[M][E] = pow(10, k - Z[M][E]);
}
double A; int B;
while (cin>>s && s!="0e0") {
s[s.find('e')] = ' ';
sscanf(s.c_str(), "%lf %d", &A, &B);
bool flag = false;
for (M = 0; M <= 9; ++M) {
for (E = 1; E <= 30; ++E)
if (fabs(X[M][E] - A) < 1e-5 && B==Z[M][E]) { flag = true; cout << M << ' ' << E << endl; }
if (flag) break;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: