UVa11809 - Floating-Point Numbers

来源:互联网 发布:网络维护与故障排解 编辑:程序博客网 时间:2024/05/19 17:06
题意 给出一个浮点数, 求其表示底数的位数和指数的位数
AeB = C*2^(D)形式,先求出表,然后再查表即可
代码如下:
#include <iostream>#include <fstream>#include <cmath>#include <string>#include <cstdio>#include <cstdlib>const int M = 10;const int E = 31;const double EPS = 1e-4;using namespace std;#pragma warning(disable:4996)double m[M][E];int e[M][E];void init();int main(){#ifndef ONLINE_JUDGEifstream fin("F:\\OJ\\uva_in.txt");streambuf *old = cin.rdbuf(fin.rdbuf());#endifinit();string s;while (cin >> s){if (s == "0e0") break;int pos = s.find_first_of('e');double a = atof(s.substr(0, pos).c_str());int b = atoi(s.substr(pos + 1).c_str());for (int i = 0; i < M; i++){for (int j = 1; j < E; j++){if (fabs(m[i][j] - a) < EPS && e[i][j] == b){cout << i << " " << j << endl;}}}}#ifndef ONLINE_JUDGEcin.rdbuf(old);#endifreturn 0;}void init(){for (int i = 0; i < M; i++){for (int j = 1; j < E; j++){double a = 1 - pow(2, -(i + 1));double b = pow(2, j) - 1;double x = log10(a) + b * log10(2);int c = floor(x);double d = pow(10, x - c);m[i][j] = d;e[i][j] = c;}}}

0 0