PAT A1010 Radix题解
一定要注意
二分搜索时,由于进制上界会可能很大(最大是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题解相关推荐
- PAT A1010 Radix
原文链接: PAT A1010 Radix 上一篇: 完美数列 PAT A1085 下一篇: PAT A1044. Shopping in Mars (25) https://www.patest.c ...
- PAT A1010.Radix 二分法
PAT A1010.Radix 链接: https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 算法 ...
- PAT.A1010 Radix
返回目录 题意 输入四个整数NI.N2.tag. radix. 其中tag=1表示NI为radix进制数,tag=2 表示N2为radix进制数.范围: NI和N2均不超过10个数位,且每个数位均为0 ...
- PAT A1010 Radix +神
1010 Radix (25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 1 ...
- PAT A1010 Radix (25 分)
Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...
- 正整数 java_JAVA语言:正整数A+B(Java)PAT团体程序设计题解
本文主要向大家介绍了JAVA语言:正整数A+B(Java)PAT团体程序设计题解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 本题的目标很简单,就是求两个正整数A和B的和,其中A和 ...
- 2021 PAT甲级秋季题解
PAT 2021秋季题解 7-1(11分代码) #include "bits/stdc++.h" using namespace std; struct node {long lo ...
- PAT 甲级 A1010 Radix (25 分)
题目传送门 这个题用二分做,我自己写的二分呢太菜了,只能拿到19分,不放出来丢人了.后面看了yxc的代码,美妙绝伦哈. 慢慢来拜读一下. #include "bits/stdc++.h&qu ...
- PAT甲题题解-1010. Radix (25)-二分搜索
题意:给出n1和n2,以及其中一个数的进制,问另一个数是多少进制的情况下,才会是两个数相等.不存在的话,则输出Impossible 这题思路很简单,但是要考虑的比较多,在简单题里面算是比较好的. 有两 ...
最新文章
- java9新特性-16-Deprecated的相关API
- 《计算机网络-自顶向下方法》之什么是因特网?
- Plitch for the final Feb 16
- 看我如何发现Uber合作方网站XXE 0day漏洞并获得9000美元赏金
- jquery调用WCF
- 超简单的分布式ID生成方案!美团开源框架介绍
- Dumpsys Input Diagnostics
- 不失真截取PDF中的矢量图到Word里
- CEF3中js调用delphi内部方法
- “站长也疯狂,开车盛宴”——如何选择运维产品
- win7系统启用还原服务器,小编为你讲解win7系统提示服务器上的MSDTC不可用的还原方案...
- 卡方拟合优度检验(非参)
- 智慧路灯杆网关_路灯杆控制网关_路灯杆通信网关
- typecho图标_handsome+Typecho美化过程【持续更新】包括踩坑解决办法
- 力扣刷题 DAY_69 回溯
- Ardupilot飞控添加使用诺瓦泰GPS
- 阿里云服务器ICP备案流程概述
- 生活记录:记录2020暑假前半部分时光
- android 相册view,Android直接把当前View保存到相册
- Kahan summation