UVa 11809 Floating-Point Numbers
2017-04-24 20:51
459 查看
Problem Description
给你A*10^B这样格式的数据,让你求它的尾码和阶码
m*2^e, m,e分别为二进制,m从0.1开始后面1的个数为尾码,e为阶码
m*2^e = A*10^B 想办法表示A,B所以就两边同时取对数
令t = log10(m) + elog10(2) = log10(A) + B; 如果1 <= A < 10 ; 0 < log10(A) < 1, 所以用long long 存储后 t直接等于B; A = pow(10, t - longlong存起来的数);
Sample Input
5.699141892149156e76
9.205357638345294e18
0e0
Sample Output
5 8
8 6
代码:
给你A*10^B这样格式的数据,让你求它的尾码和阶码
m*2^e, m,e分别为二进制,m从0.1开始后面1的个数为尾码,e为阶码
m*2^e = A*10^B 想办法表示A,B所以就两边同时取对数
令t = log10(m) + elog10(2) = log10(A) + B; 如果1 <= A < 10 ; 0 < log10(A) < 1, 所以用long long 存储后 t直接等于B; A = pow(10, t - longlong存起来的数);
Sample Input
5.699141892149156e76
9.205357638345294e18
0e0
Sample Output
5 8
8 6
代码:
#include <iostream> #include <sstream> #include <string> #include <cmath> using namespace std; int main() { double M[20][40]; long long E[20][40]; // 打表 for(int i = 0; i <= 9; ++i) for(int j = 1; j <= 30; ++j) {//分别表示位数, double m = 1 - pow(2, -1 - i), e = pow(2, j) - 1;//二进制转换成十进制 double t = log10(m) + e * log10(2);//log10(m) + e * log10(2) = log10(A) + B; //1 <= A < 10 ; 0 < log10(A) < 1, 所以用long long 存储后 直接等于B。 E[i][j] = t, M[i][j] = pow(10, t - E[i][j]);//M数组存储 对应A的值 } // 输入并输出结果 string in; while(cin >> in && in != "0e0") { // 处理输入 for(string::iterator i = in.begin(); i != in.end(); ++i) if(*i == 'e') *i = ' '; istringstream ss(in); double A; int B; ss >> A >> B; while(A < 1) A *= 10, B -= 1;//可以去掉 或者 //也可以不去掉,去掉fabs(A/10 - M[i][j])<1e-4 // 在打好的表中寻找答案 for(int i = 0; i <= 9; ++i) for(int j = 1; j <= 30; ++j) { if(B == E[i][j] && (fabs(A - M[i][j]) < 1e-4 || fabs(A / 10 - M[i][j]) < 1e-4)) { cout << i << ' ' << j << endl; break; } } } }
相关文章推荐
- UVa 11809 Floating-Point Numbers
- 习题3-12 浮点数(Floating-Point Numbers, UVa11809)
- UVa-11809 - Floating-Point Numbers
- 习题3-12 浮点数(Floating-Point Numbers, UVa11809)
- UVA - 11809 Floating-Point Numbers
- Uva 11809 Floating-Point Numbers
- UVa-11809 - Floating-Point Numbers
- 算法竞赛入门经典第三章3-12 Floating-Point Numbers UVA - 11809
- UVA - 11809 Floating-Point Numbers
- Floating-Point Numbers UVA - 11809
- UVa11809 - Floating-Point Numbers
- UVA-11809 Floating-Point Numbers
- UVA 11809 Floating-Point Numbers
- uva 11809 - Floating-Point Numbers(浮点数)
- UVa 11809 - Floating-Point Numbers
- UVa 11809 Floating-Point Numbers
- UVA 11809 Floating-Point Numbers(暴力)
- UVA 11809 - Floating-Point Numbers【浮点数】
- UVa11809-Floating-Point Numbers
- UVA 11809 - Floating-Point Numbers