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. WP8.1开发:简单天气预报应用(转)

    今天小梦给大家分享一个简单的天气预报应用源码:调用的是百度API.整个应用都没有什么难点.只是一个简单的网络请求和json数据处理.在WP8.1有小娜的情况下,天气预报应用还有意义吗?我认为还是有点意 ...

  2. 【cs229-Lecture5】生成学习算法:1)高斯判别分析(GDA);2)朴素贝叶斯(NB)

    参考: cs229讲义 机器学习(一):生成学习算法Generative Learning algorithms:http://www.cnblogs.com/zjgtan/archive/2013/ ...

  3. sea.js常用接口

    seajs.config 用来对 Sea.js 进行配置. seajs.config({ // 指定需要使用的插件 plugins: ['text', 'shim'], // 设置别名,方便调用 al ...

  4. Geoserver

    Geoserver是一个功能齐全,遵循OGC开放标准的开源WFS-T和WMS服务器.利用Geoserver可以把数据作为maps/images来发布(利用WMS来实现)也可以直接发布实际的数据(利用W ...

  5. jade(pug)学习笔记(待填充.......)

    深刻认识到总结知识点的重要性,不然遇到似曾相识的问题,要翻老半天的百度才能解决.20171018 pug——文字内部嵌入结构 比如: <a class = "href"> ...

  6. document.visibilityState 监听浏览器最小化

    document.hidden:表示页面是否隐藏的布尔值.页面隐藏包括 页面在后台标签页中 或者 浏览器最小化 (注意,页面被其他软件遮盖并不算隐藏,比如打开的 sublime 遮住了浏览器). do ...

  7. cookie设置在特定时间点过期的方法

    假设需求为:在当天晚上0:00过期. 方法: 得到当天晚上0:00这个时间点的一个时间. function getNextDate(){        var d = new Date(),      ...

  8. Android.mk (2) 函数进阶教程 - 分支、循环、子程序

    https://www.jianshu.com/p/674dc7d7b4b0 函数进阶教程 - 分支.循环.子程序 按照面向过程程序设计的标准流程,我们讲完了顺序结构,就要讲分支.循环和子程序.下面我 ...

  9. Linux 常用查找文件或者文件内容

    举例树形图 .|-- test_dir| `-- dir_test_doc.text|-- test_dir2| |-- dir2_test_doc.txt| `-- dir2_test_doc2.t ...

  10. Oracle相关内容整理

    一.常用sql 1.查看版本 SELECT * FROM V$VERSION; SELECT version FROM V$INSTANCE 2.数据库发生死锁时,跟踪文件的位置 关于跟踪文件,大义是 ...