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.代码:

 1 #include <string>
 2 #include <vector>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <cstdio>
 6 
 7 using namespace std;
 8 
 9 string mul(string str1,string str2)
10 {
11     vector<int> v_res(str1.size()+str2.size(),0);
12     string::size_type i,j;
13     vector<int>::size_type k,p;
14 
15     reverse(str1.begin(),str1.end());
16     reverse(str2.begin(),str2.end());
17     for(i = 0; i != str1.size(); ++i)
18     {
19         for(j = 0; j != str2.size(); ++j)
20         {
21             v_res[i+j] += (str1[i]-'0') * (str2[j] - '0');
22         }
23     }
24     for(k = 0; k != v_res.size() - 1; ++k)
25     {
26         v_res[k+1] += v_res[k] / 10;
27         v_res[k] = v_res[k] % 10;
28     }
29 
30     for(p = v_res.size() - 1; p != -1; --p)
31     {
32         if(v_res[p] != 0) break;
33     }
34     if(p == -1) p = 0;
35 
36     string s_res(p+1,'0');
37     for(k = p; k != -1; --k) s_res[p-k] = char(v_res[k] + '0');
38     
39 
40     return s_res;
41 
42 }
43 
44 int cmp(string str1,string str2)
45 {
46     if(str1.size() != str2.size()) return str1.size() - str2.size();
47     int i;
48     for(i = 0; i < str1.size(); ++i)
49         if(str1[i] != str2[i]) break;
50     if(i < str1.size()) return (str1[i] - str2[i]);
51     else return 0;
52 }
53 
54 int main()
55 {
56     int n;
57     cin>>n;
58 
59     string a,b;
60     int i;
61     string x1,x2;
62     while(n--)
63     {
64         cin>>a>>b;
65         x1 = "1";
66         for(i = 0; i <= 20; ++i)
67         {
68             x1 = mul(x1,a);
69             if(cmp(x1,b) > 0) break;
70         }
71         cout<<i<<endl;
72     }
73     return 0;
74 }
原文地址:https://www.cnblogs.com/mobileliker/p/3548862.html