OpenJudge 2739 计算对数

时间:2023-03-09 15:39:31
OpenJudge 2739 计算对数

1.链接地址:

http://bailian.openjudge.cn/practice/2739/

2.题目:

总时间限制:
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

3.思路:

枚举+高精度乘法+高精度比较+数学题

4.代码:

 #include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <cstdio> using namespace std; string mul(string str1,string str2)
{
vector<int> v_res(str1.size()+str2.size(),);
string::size_type i,j;
vector<int>::size_type k,p; reverse(str1.begin(),str1.end());
reverse(str2.begin(),str2.end());
for(i = ; i != str1.size(); ++i)
{
for(j = ; j != str2.size(); ++j)
{
v_res[i+j] += (str1[i]-'') * (str2[j] - '');
}
}
for(k = ; k != v_res.size() - ; ++k)
{
v_res[k+] += v_res[k] / ;
v_res[k] = v_res[k] % ;
} for(p = v_res.size() - ; p != -; --p)
{
if(v_res[p] != ) break;
}
if(p == -) p = ; string s_res(p+,'');
for(k = p; k != -; --k) s_res[p-k] = char(v_res[k] + ''); return s_res; } int cmp(string str1,string str2)
{
if(str1.size() != str2.size()) return str1.size() - str2.size();
int i;
for(i = ; i < str1.size(); ++i)
if(str1[i] != str2[i]) break;
if(i < str1.size()) return (str1[i] - str2[i]);
else return ;
} int main()
{
int n;
cin>>n; string a,b;
int i;
string x1,x2;
while(n--)
{
cin>>a>>b;
x1 = "";
for(i = ; i <= ; ++i)
{
x1 = mul(x1,a);
if(cmp(x1,b) > ) break;
}
cout<<i<<endl;
}
return ;
}