2739:计算对数
时间限制:
1000ms
内存限制:
65536kB
描述
给定两个正整数a和b。可以知道一定存在整数x,使得
x <= logab < x + 1输出x输入
第1行是测试数据的组数n,每组测试数据占2行,分别是a和b。每组测试数据之间有一个空行,每行数据不超过100个字符
输出
n行,每组测试数据有一行输出,也就是对应的x。输入数据保证x不大于20
样例输入
3
10000
1000000000001
10000
999999999999
999999999999999999999999999999999999999999999999
1
样例输出
3
2
0
#include"iostream"
#include"cmath"#include"cstring"#include"stdlib.h"using namespace std;int main(){ int t; cin>>t; while(t--) { char a[100]; char b[100]; cin>>a>>b; int La=strlen(a); int Lb=strlen(b); a[6]='\0';//仅保留6位数 b[6]='\0'; for(int i=0;i<6;i++)//前6位是'\0'的一律转化为'0',为后面除以1e5以得到整数部分仅剩一位的小数,即自然对数表示法的近似值 { if(a[i]=='\0') a[i]='0'; if(b[i]=='\0') b[i]='0'; } cout<<int((log10(atof(b)/1e5)+Lb-1)/(log10(atof(a)/1e5)+La-1))<<endl;//注意,一定要强制转化为int型;atof是int型转换为float型; //后面加上La-1是整数部分,前面部分是小数部分(a字符串代表的数字可近似表示为atof(a/1e5)*1e(La-1),取对数后就是上面的形式了) }}