一定要注意
二分搜索时,由于进制上界会可能很大(最大是N1+1),所以转化N2的时候,很有可能超longlong,这时候需要判断是否超范围,并且做相应的判断。

并且,转化过程中使用到的变量,也需要尽量开成longlong

如果bnum(N2转化的数)超了longlong,那就必然是比N1大的,令right=mid-1,向左区间搜索即可。

满分题解,使用二分查找

#include <stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cctype>
#include<string.h>
using namespace std;const long long inf = (1LL << 63) - 1;
const int maxn=15;
char a[maxn], b[maxn];
long long anum;//进制转化函数
long long change(char s[], int radix) {int len = strlen(s);long long res = 0;long long mul = 1;//这个变量一定要开成longlong,请思考为什么for (int i = len-1; i >=0; i--) {char c = s[i];int num = 0;if (isdigit(c)) {num = c - '0';}else {num = 10 + c - 'a';}res += num * mul;if (res < 0)return -1;mul *= radix;}return res;
}//二分求解b的进制
long long binarySearch(char s[], long long left, long long right) {long long mid;while (left <= right) {mid = (left + right) / 2;long long bnum = change(s, mid);if (bnum < 0) {right = mid - 1;}else if (anum == bnum) {return mid;}else if (bnum > anum) {right = mid-1;}else {left = mid + 1;}}return -1;
}int main() {//freopen("input.txt", "r", stdin);int tag, radix;scanf("%s %s %d %d", &a, &b,&tag,&radix);//radix是a的进制if (tag == 2) {swap(a, b);}//转化a为10进制anum = change(a, radix);//求b中最大的数,这样求出b进制的最小可能int bmax = 0;for (int i = 0; i < strlen(b); i++) {int bchar = 0;if (isdigit(b[i])) {bchar = b[i] - '0';}else {bchar = b[i] - 'a' + 10;}if (bchar > bmax) {bmax = bchar;}}//循环求b进制long long i = bmax + 1;long long high = max(i, anum)+1;long long res=binarySearch(b, i, high);if (res==-1) {cout << "Impossible";}else {printf("%lld", res);}return 0;
}

使用暴力搜索(24分),有一个案例超时

#include <stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cctype>
#include<string.h>
using namespace std;const int maxn=15;
char a[maxn], b[maxn];//进制转化函数
long long change(char s[], int radix) {int len = strlen(s);long long res = 0;int mul = 1;for (int i = len-1; i >=0; i--) {char c = s[i];int num = 0;if (isdigit(c)) {num = c - '0';}else {num = 10 + c - 'a';}res += num * mul;mul *= radix;}return res;
}int main() {//freopen("input.txt", "r", stdin);int tag, radix;scanf("%s %s%d%d", &a, &b,&tag,&radix);//radix是a的进制if (tag == 2) {swap(a, b);}//转化a为10进制long long anum = change(a, radix);//求b中最大的数,这样求出b进制的最小可能int bmax = 0;for (int i = 0; i < strlen(b); i++) {int bchar = 0;if (isdigit(b[i])) {bchar = b[i] - '0';}else {bchar = b[i] - 'a' + 10;}if (bchar > bmax) {bmax = bchar;}}//循环求b进制long long i = bmax + 1;for (i; i <= anum+1; i++) {long long bnum = change(b, i);if (anum == bnum) {break;}}if (i > anum+1) {cout << "Impossible";}else {cout << i;}return 0;
}

PAT A1010 Radix题解相关推荐

  1. PAT A1010 Radix

    原文链接: PAT A1010 Radix 上一篇: 完美数列 PAT A1085 下一篇: PAT A1044. Shopping in Mars (25) https://www.patest.c ...

  2. PAT A1010.Radix 二分法

    PAT A1010.Radix 链接: https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 算法 ...

  3. PAT.A1010 Radix

    返回目录 题意 输入四个整数NI.N2.tag. radix. 其中tag=1表示NI为radix进制数,tag=2 表示N2为radix进制数.范围: NI和N2均不超过10个数位,且每个数位均为0 ...

  4. PAT A1010 Radix +神

    1010 Radix (25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 1 ...

  5. PAT A1010 Radix (25 分)

    Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...

  6. 正整数 java_JAVA语言:正整数A+B(Java)PAT团体程序设计题解

    本文主要向大家介绍了JAVA语言:正整数A+B(Java)PAT团体程序设计题解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 本题的目标很简单,就是求两个正整数A和B的和,其中A和 ...

  7. 2021 PAT甲级秋季题解

    PAT 2021秋季题解 7-1(11分代码) #include "bits/stdc++.h" using namespace std; struct node {long lo ...

  8. PAT 甲级 A1010 Radix (25 分)

    题目传送门 这个题用二分做,我自己写的二分呢太菜了,只能拿到19分,不放出来丢人了.后面看了yxc的代码,美妙绝伦哈. 慢慢来拜读一下. #include "bits/stdc++.h&qu ...

  9. PAT甲题题解-1010. Radix (25)-二分搜索

    题意:给出n1和n2,以及其中一个数的进制,问另一个数是多少进制的情况下,才会是两个数相等.不存在的话,则输出Impossible 这题思路很简单,但是要考虑的比较多,在简单题里面算是比较好的. 有两 ...

最新文章

  1. java9新特性-16-Deprecated的相关API
  2. 《计算机网络-自顶向下方法》之什么是因特网?
  3. Plitch for the final Feb 16
  4. 看我如何发现Uber合作方网站XXE 0day漏洞并获得9000美元赏金
  5. jquery调用WCF
  6. 超简单的分布式ID生成方案!美团开源框架介绍
  7. Dumpsys Input Diagnostics
  8. 不失真截取PDF中的矢量图到Word里
  9. CEF3中js调用delphi内部方法
  10. “站长也疯狂,开车盛宴”——如何选择运维产品
  11. win7系统启用还原服务器,小编为你讲解win7系统提示服务器上的MSDTC不可用的还原方案...
  12. 卡方拟合优度检验(非参)
  13. 智慧路灯杆网关_路灯杆控制网关_路灯杆通信网关
  14. typecho图标_handsome+Typecho美化过程【持续更新】包括踩坑解决办法
  15. 力扣刷题 DAY_69 回溯
  16. Ardupilot飞控添加使用诺瓦泰GPS
  17. 阿里云服务器ICP备案流程概述
  18. 生活记录:记录2020暑假前半部分时光
  19. android 相册view,Android直接把当前View保存到相册
  20. Kahan summation

热门文章

  1. 使用Javascript的跨浏览器支持的图像偏斜效果
  2. Starrocks集群部署
  3. CREO-三维建模技巧
  4. swift monkeyking 社交分享
  5. 南卡和三星哪款蓝牙耳机音质好些?高颜值且音质好的蓝牙耳机测评
  6. MATLAB仿真m序列,Gold序列,Kasami序列扩频码性能仿真分析
  7. Python--数字炸弹游戏
  8. js之splice 和 slice
  9. win10右键菜单发送到的选项为空怎么解决
  10. 使用mysqladmin修改用户密码的正确方法!