【PAT甲级】1010. Radix (25)
2016-09-29 18:48
429 查看
注:在进行十进制转换时,每一步都应当判断溢出。
注2:radix可能非常大,需要运用二分查找。
注2:radix可能非常大,需要运用二分查找。
#include <stdio.h> #include <string.h> #include <cmath> long long getDecimal(char a[], int radix); int getDigit(char c); int findRadix(char N[], long long low, long long high); int findMax(char N[]); long long getMax(long long a, long long b, long long c); char N1[11], N2[11]; long long num1, num2, radix; int tag; int main(int argc, char *argv[]) { scanf("%s %s %d %lld", N1, N2, &tag, &radix); if (tag == 2) { for (int i = 0; i < 11; i++) { char tmp = N1[i]; N1[i] = N2[i]; N2[i] = tmp; } } num1 = getDecimal(N1, radix); long long low = findMax(N2) + 1; long long high = getMax(num1 + 1, radix, low); int out = findRadix(N2, low, high); if (out == -1) printf("Impossible\n"); return 0; } long long getDecimal(char a[], int radix) { long long num = 0; int n; int d = strlen(a); for (int i = 0; i < d; i++) { n = getDigit(a[i]); num += n * pow(radix, d - 1 - i); if (num < 0) return -1;//判断溢出,这一步很重要 } return num; } int getDigit(char c) { if (c <= 57) return int(c - '0'); else { return int(c - '0' - 39); } } int findRadix(char N[], long long low, long long high) { if (low > high) return -1; long long mid = (low + high) / 2; long long n = getDecimal(N, mid); if (n == num1) { printf("%lld\n", mid); return 1; } else if (n == - 1 || n > num1) { return findRadix(N, low, mid - 1); } else { return findRadix(N, mid + 1, high); } } int findMax(char N[]) { int d = strlen(N); int n; int max = 0; for (int i = 0; i < d; i++) { n = getDigit(N[i]); if (max < n) max = n; } return max; } long long getMax(long long a, long long b, long long c) { long long m = a; if (b > m) m = b; if (c > m) m = c; return m; }
相关文章推荐
- Python练习 os模块 实现一个小shell
- CodeForces 635C XOR Equation
- 用两个队列实现一个栈
- 微信小程序把玩(三十六)Storage API
- hibernate总结(3)
- 51Nod-1503-猪和回文
- centos 6.4 重启分区故障
- Top k问题的讨论(三种方法的java实现及适用范围)
- 微信二次开发资源整理
- Git创建和管理远程分支
- Java设计模式(1) 单例模式
- 高并发服务器拥塞控制算法(很早写的未完成的文章,再不发就会被遗忘了)
- SLIMBus
- IntelliJ IDEA 12详细开发教程(一)思想的转变与新手入门
- 【linux】sudo su切换到root权限
- 公钥加密_私钥解密
- php笔记
- PAT 乙级 1008
- Spring IoC介绍
- PyQt学习笔记--备注防忘(一)