• 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 }
  • 相关阅读:
    mac redis 安装及基本设置 python操作redis
    mac webstorm自动编译typescript配置
    MySQL数据库的基本操作
    python 面试基础考试题收集
    pyhon 列表的增删改查
    python 文件读取方法详解
    MAC下绕开百度网盘限速下载的方法,三步操作永久生效
    浏览器窗口输入网址后发生的一段事情(http完整请求)
    CMDB
    django适当进阶篇
  • 原文地址:https://www.cnblogs.com/mobileliker/p/3548862.html
Copyright © 2020-2023  润新知