POJ2739(Water)

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),取对数后就是上面的形式了)
  }
}

原文地址:https://www.cnblogs.com/lzhitian/p/2140073.html