题意 给出一个浮点数, 求其表示底数的位数和指数的位数
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_JUDGE
ifstream fin("F:\\OJ\\uva_in.txt");
streambuf *old = cin.rdbuf(fin.rdbuf());
#endif
init();
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_JUDGE
cin.rdbuf(old);
#endif
return 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;
}
}
}