PAT Radix[二分][进制转换][难]
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[二分][进制转换][难]的更多相关文章
- PAT甲级 进制转换题_C++题解
进制转换题 PAT (Advanced Level) Practice 进制转换题 目录 <算法笔记> 重点摘要 1015 Reversible Primes (20) 1019 Gene ...
- JS 进制转换
十进制转换成其他进制 objectname.toString([radix]) objectname 必选项.要得到字符串表示的对象. radix 可选项.指定将数字值转换为字符串时的进制. 例如 ...
- C++ 中数串互转、进制转换的类
/******************************************************************** created: 2014/03/16 22:56 file ...
- 【String与基本类型之间的转换】以及【进制转换】
1. 基本数据类型---->字符串类型: 方法一:使用连接一个空字符串,例如 基本数据类型+“” : 方法二:静态方法 String.valueOf(),具体有: String.valueOf ...
- java 13-4 Integer和String、int之间的转换,进制转换
1.int类型和String类型的相互转换 A.int -- String 推荐用: public static String valueOf(int i) 返回 int 参数的字符串表示形式. B. ...
- Swift3.0 进制转换
Swift3.0 进制转换 模块可以直接使用,写的不是很好,欢迎来喷 // Data -> HexStrings func dataToHexStringArrayWithData(data: ...
- java中Integer包装类的具体解说(java二进制操作,全部进制转换)
程序猿都非常懒,你懂的! 今天为大家分享的是Integer这个包装类.在现实开发中,我们往往须要操作Integer,或者各种进制的转换等等.我今天就为大家具体解说一下Integer的使用吧.看代码: ...
- C++中进制转换问题
一直在刷题的时候,都会遇到一个坑,就是进制转换的问题.而每一次都傻乎乎的自己去实现一个.所以算是对以前的坑的一个总结. itoa 函数 itoa是广泛应用的非标准C语言和C++语言扩展函数.由于它不是 ...
- JavaSE教程-03Java中分支语句与四种进制转换
一.分支语句 计算机源于生活,程序模拟现实生活,从而服务生活 行为模式 1,起床,刷牙,洗脸,吃早餐,上课,回家,睡觉(顺序性) 2,如果时间不太够,打个滴滴快车,如果时间够,坐个地铁(选择性) 3, ...
随机推荐
- Python学习(25):Python执行环境
转自 http://www.cnblogs.com/BeginMan/p/3191856.html 一.python特定的执行环境 在当前脚本继续进行 创建和管理子进程 执行外部命令或程序 执行需要输 ...
- springboot---->springboot中的格式化(一)
这里面我们简单的学习一下springboot中关于数据格式化的使用.我以为你不是个好人,没想到你连个坏人都不是. springboot中的格式化 我们的测试环境是springboot,一个将字符串格式 ...
- 云计算设计模式(二十三)——Throttling节流模式
云计算设计模式(二十三)——Throttling节流模式 控制由应用程序使用,一个单独的租户或整个服务的一个实例的资源的消耗.这种模式可以允许系统继续运行并满足服务水平协议,即使当增加需求的资源放置一 ...
- Ubuntu 16.04 LAMP server tutorial with Apache 2.4, PHP 7 and MariaDB (instead of MySQL)
https://www.howtoforge.com/tutorial/install-apache-with-php-and-mysql-on-ubuntu-16-04-lamp/ This tut ...
- Elasticsearch学习之深入搜索三 --- best fields策略
1. 为帖子数据增加content字段 POST /forum/article/_bulk { "} } { "doc" : {"content" : ...
- sencha touch 在线实战培训 第一期 第三节
2014.1.2晚上8点开的课 讲课进度比较快,好多同学反应说有些跟不上了... 呃,本期的课程是需要有一定的基础的. 建议大家多看看http://www.cnblogs.com/mlzs/p/346 ...
- ios中的coredata的使用
Core Data数据持久化是对SQLite的一个升级,它是iOS集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类. (1)NSManagedObjectModel(被管 ...
- mysql概要(六)连接(内连接,左,右外连接
内连接 [join on / from 表1,表二 ]效果一样 区别是:可以理解为首先取得笛卡儿积后,再匹配/还是根据条件获得笛卡尔积 内连接:取俩表的交叉匹配数据:(mysql 内连接 左连接 右连 ...
- css如何设置label的字间距
css.html如何设置label的字间距 .myClass label{ letter-spacing: 10px; } 如果label需要居中,需加上 text-indent: 10px; 首行 ...
- 使用Wireshark分析QQ聊天