1010 Radix (25)(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

//感觉这道题就整个很难读懂。

//N1 N2 tag radix

//如果tag是1的话,那么radix就是N1的基数;如果tag是2的话,那么radix就是N2的基数。radix的取值范围是0-35.也就是最多是35进制。

//我的想法是先将tag所指的数转成10进制,然后找到另一个数digit最大的,如果当前2进制已经>另一个,那么就impossible;否则就增大;就是很普通的想法。不会想到使用二分法,就是看到题解二分法之后也没想到二分法是如何使用的。

代码来自:https://www.liuchuo.net/archives/2458

#include <iostream>
#include <cctype>//isdigit函数,从来没见过这个函数,厉害了。
#include <algorithm>
#include <cmath>
#include<string>
#include<stdio.h>
using namespace std;
long long convert(string n, long long radix) {
//
long long sum = ;
int index = , temp = ;
// for (auto it = n.rbegin(); it != n.rend(); it++) {//isdigit需要配合这样的for循环使用。
// temp = isdigit(*it) ? *it - '0' : *it - 'a' + 10;
// sum += temp * pow(radix, index++);
// }
int len=n.size();//也可以这样将radix进制转化为10进制。
for(int i=;i<len;i++){
if(n[i]>=''&&n[i]<='')temp=n[i]-'';
else temp=n[i]-'a'+;
sum=sum*radix+temp;
}
return sum;
}
long long find_radix(string n, long long num) {//num是10进制的数
char it = *max_element(n.begin(), n.end());//找出最大的元素。
//进制数最小是最大元素+1
//如n=s9jik;则low=29,
//若n="10",那么进制就会取到num.!!
long long low = (isdigit(it) ? it - '': it - 'a' + ) + ;
long long high = max(num, low);
while (low <= high) {
long long mid = (low + high) / ;
long long t = convert(n, mid);
if (t < || t > num) high = mid - ;
else if (t == num) return mid;
else low = mid + ;
}
return -;
}
int main() {
string n1, n2;
long long tag = , radix = , result_radix;
cin >> n1 >> n2 >> tag >> radix;
result_radix = tag == ? find_radix(n2, convert(n1, radix)) : find_radix(n1, convert(n2, radix));
if (result_radix != -) {
printf("%lld", result_radix);
} else {
printf("Impossible");
}
return ;
}

1.使用二分法,low很好确定,high是另一个数的10进制数;(没想到进制可以这么大)很厉害。

2.radix制如何转换成10进制。

PAT Radix[二分][进制转换][难]的更多相关文章

  1. PAT甲级 进制转换题_C++题解

    进制转换题 PAT (Advanced Level) Practice 进制转换题 目录 <算法笔记> 重点摘要 1015 Reversible Primes (20) 1019 Gene ...

  2. JS 进制转换

    十进制转换成其他进制 objectname.toString([radix])   objectname 必选项.要得到字符串表示的对象. radix 可选项.指定将数字值转换为字符串时的进制. 例如 ...

  3. C++ 中数串互转、进制转换的类

    /******************************************************************** created: 2014/03/16 22:56 file ...

  4. 【String与基本类型之间的转换】以及【进制转换】

    1. 基本数据类型---->字符串类型: 方法一:使用连接一个空字符串,例如  基本数据类型+“” : 方法二:静态方法 String.valueOf(),具体有: String.valueOf ...

  5. java 13-4 Integer和String、int之间的转换,进制转换

    1.int类型和String类型的相互转换 A.int -- String 推荐用: public static String valueOf(int i) 返回 int 参数的字符串表示形式. B. ...

  6. Swift3.0 进制转换

    Swift3.0 进制转换 模块可以直接使用,写的不是很好,欢迎来喷 // Data -> HexStrings func dataToHexStringArrayWithData(data: ...

  7. java中Integer包装类的具体解说(java二进制操作,全部进制转换)

    程序猿都非常懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往须要操作Integer,或者各种进制的转换等等.我今天就为大家具体解说一下Integer的使用吧.看代码: ...

  8. C++中进制转换问题

    一直在刷题的时候,都会遇到一个坑,就是进制转换的问题.而每一次都傻乎乎的自己去实现一个.所以算是对以前的坑的一个总结. itoa 函数 itoa是广泛应用的非标准C语言和C++语言扩展函数.由于它不是 ...

  9. JavaSE教程-03Java中分支语句与四种进制转换

    一.分支语句 计算机源于生活,程序模拟现实生活,从而服务生活 行为模式 1,起床,刷牙,洗脸,吃早餐,上课,回家,睡觉(顺序性) 2,如果时间不太够,打个滴滴快车,如果时间够,坐个地铁(选择性) 3, ...

随机推荐

  1. Entity Framework6的在线下载安装

    Entity Framework6的在线下载安装 Entity Framework 简单介绍: 看名字就知道肯定是关于数据模型的…… Entity Framework:微软官方提供的ORM()工具,O ...

  2. android studio 引用远程仓库下载慢(JCenter下载慢)的办法

    https://blog.csdn.net/linglingchenchen/article/details/62236723 解决android studio引用远程仓库下载慢(JCenter下载慢 ...

  3. 问题记录 为ubuntu16.04添加windows字体(解决JIRA图表乱码的问题)

    最近遇到了JIRA在新的ubuntu机器上图表的中文无法正确显示的问题,解决的方法是,为ubuntu安装中文字体,我们选择把windows上的字体复制到ubuntu上来安装的方法,步骤如下: 从win ...

  4. 遮挡剔除 Occlusion Culling(转)

    一.首先介绍下draw call(这个东西越少你的游戏跑的越快): 在游戏中每一个被展示的独立的部分都被放在了一个特别的包中,我们称之为“描绘指令”(draw call),然后这个包传递到3D部分在屏 ...

  5. spring boot 部署

    指定运行的内存 java -Xms10m -Xmx200m -jar xxx.jar spring boot 打包成war包: 让 SpringbootApplication 类继承 SpringBo ...

  6. vue之cli脚手架项目中组件的使用

    在webpack-simple模板中,包括webpck模板.一个.vue文件就是一个组件. 为什么会这样呢?因为webpack干活了!webpack的将我们所有的资源文件进行打包.同时webpack还 ...

  7. 关于jquery的css的一些知识

    Query实例CSS 样式表动态选择本实例主要说的还是jquery的选择器,关于jquery的css的一些知识用类似 $("li").css("cursor", ...

  8. Java-查询已创建了多少个对象

    //信1603 //查询创建了多少个对象//2017.10.19public class Lei {//记录对象个数 ;//生成一个对象就自加加 public Lei() { x++; }public ...

  9. System.Web.UI.Page.Cache 页面 缓存 清除

    这个也是网上查询到方法,不错记录一下! /// <summary> /// 清空所有的Cache /// </summary> public static void Clear ...

  10. matplotlib的下载和安装方法

    官网:http://matplotlib.org/ Installation节 Visit the Matplotlib installation instructions. Installing节 ...