• 1010 Radix (25 分)


    Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number.

    Now for any pair of positive integers N1​​ and N2​​, your task is to find the radix of one number while that of the other is given.

    Input Specification:

    Each input file contains one test case. Each case occupies a line which contains 4 positive integers:

    
    N1 N2 tag radix
    
    

    Here N1 and N2 each has no more than 10 digits. A digit is less than its radix and is chosen from the set { 0-9, a-z } where 0-9 represent the decimal numbers 0-9, and a-z represent the decimal numbers 10-35. The last number radix is the radix of N1 if tag is 1, or of N2 if tag is 2.

    Output Specification:

    For each test case, print in one line the radix of the other number so that the equation N1 = N2 is true. If the equation is impossible, print Impossible. If the solution is not unique, output the smallest possible radix.

    Sample Input 1:

    6 110 1 10
    

    Sample Output 1:

    2
    

    Sample Input 2:

    1 ab 1 2
    

    Sample Output 2:

    Impossible

    题目分析:将两个元素转换为10进制进行比较 ,对于那个不确定进制的参数,我们可以使用二分法来求它的进制
    参考了柳神的答案
     1 #include<iostream>
     2 #include<string>
     3 #include<stdlib.h>
     4 #include<vector>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 long long tolong(string str, long long radix)
     9 {
    10     long long length = str.length();
    11     long long num = 0;
    12     for (long long j = 0; j < length; j++)
    13         num = (isdigit(str[j])) ? num * radix + str[j] - '0' : num * radix + str[j] - 'a' + 10;
    14     return num;
    15 }
    16 long long Find_radix(string num,long long N)
    17 {
    18     char it = *max_element(num.begin(), num.end());
    19     long long low = ((isdigit(it)) ? it - '0' : it - 'a' + 10)+1;
    20     long long high = max(N,low);
    21     long long mid;
    22     while (low<=high)
    23     {
    24         mid = (low + high) / 2;
    25         long long n = tolong(num, mid);
    26         if (n > N||n<0)
    27             high = mid-1;
    28         else if (n < N)
    29             low = mid+1;
    30         else
    31             return mid;
    32     }
    33     return -1;
    34 }
    35 
    36 int main()
    37 {
    38     string N1, N2;
    39     long long tag, radix;
    40     cin >> N1 >> N2 >> tag >> radix;
    41     long long flag = 0;
    42     flag = tag == 1 ? Find_radix(N2, tolong(N1, radix)) : Find_radix(N1, tolong(N2, radix));
    43     if (flag==-1)
    44         cout << "Impossible";
    45     else
    46         cout << flag;
    47     return 0;
    48 }
    View Code
     
  • 相关阅读:
    Linux下安装SVN服务端小白教程
    在 Linux 下搭建 Git 服务器
    Linux系统中安装软件的几种方式
    springboot系列(十)springboot整合shiro实现登录认证
    shiro系列五、shiro密码MD5加密
    springboot系列(九)springboot使用druid数据源
    springboot系列(七) 项目热加载
    访问网页出现DNS错误
    SpringBoot入门
    MyBatisCodeHelper-Pro插件破解版[2.8.2] 【拒绝度盘】
  • 原文地址:https://www.cnblogs.com/57one/p/11867020.html
Copyright © 2020-2023  润新知