OpenJudge 2739 计算对数

1.链接地址:

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

2.题目:

总时间限制:
1000ms
内存限制:
65536kB
描述
给定两个正整数a和b。可以知道一定存在整数x,使得
x <= log ab < 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 }

 

你可能感兴趣的:(open)