不会看题 不懂题意,蒟蒻的我
我的理解:
题意:
输入科学计数法的十进制 跟 二进制数 作比较,(注意题意是正数,按正规数格式来 所以小数是以0.1开始 所以尾数尾数起始是1)
思想:
打表,C D 和 表里作比较,如果小于即可输出下标
思路:
A * 2^B = C * 10^D
取对数
log10(A) + B * log10(2) = log10(C) + D;
令X = log10(A) + B * log10(2);
D = log10(A) + B * log10(2) - C (因为 0 < C < 10, 所以取完对数 < 0,所以这里取不大于它的整数即可)
C = 10^D;
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
double A, M[10][31], C, X, a;
long long E[10][31], B, D;
int b;
char InE[30];
int main(){
for(int i = 0; i < 10; ++i){
for(int j = 1; j <= 30; ++j){
A = 1 - pow(2, -(i + 1));
B = pow(2, j) - 1;
X = log10(A) + B * log10(2);
D = floor(X);
C = pow(10, X - D);
M[i][j] = C;
E[i][j] = D;
}
}
while(scanf("%s", InE) == 1){
if(strcmp(InE, "0e0") == 0)
break;
InE[17]=' ';
sscanf(InE, "%lf %d", &a, &b);
int flag = 0;
for(int i = 0; i < 10; ++i){
for(int j = 1; j <= 30; ++j){
if(fabs(M[i][j] - a) < 1e-4 && b == E[i][j]){
printf("%d %d\n", i, j);
flag = 1;
break;
}
if(flag == 1)
break;
}
}
}
return 0;
}