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 ;
}