题目见:http://pat.zju.edu.cn/contests/pat-a-practise/1010
本题采用二分方法搜索进制,注意由于我使用的方法是转换为十进制进行比较,所以C/C++中即使使用了long long 类型也可能会溢出,为方便起见,本题采用Java的BigInteger实现;或者可以考虑自己实现一个大数类。
import java.math.BigInteger; import java.util.Scanner; public class Main{ private static BigInteger bs0 = new BigInteger("0"); private static BigInteger bs1 = new BigInteger("1"); private static BigInteger bs2 = new BigInteger("2"); // Or you can use: Character.getNumericValue(c) private static int charToInt(char c) { return c <= '9' ? (c - '0') : (c - 'a' + 10); } private static BigInteger getBigIntegerBased10(int val) { return new BigInteger(String.valueOf(val)); } private static BigInteger getNumber(String s, BigInteger radix) { BigInteger t = bs0; BigInteger p = bs1; char c; BigInteger temp; for (int i = s.length() - 1; i >= 0; i--) { c = s.charAt(i); temp = getBigIntegerBased10(charToInt(c)); t = t.add(temp.multiply(p)); p = p.multiply(radix); } return t; } private static void handle(String a, String b, int radix) { char c = b.charAt(0); BigInteger v1 = getNumber(a, getBigIntegerBased10(radix)); if (b.length() == 1) { int bv = charToInt(c); if (v1.intValue() == bv) { System.out.println(bv + 1); } else { System.out.println("Impossible"); } return; } for (int i = 1; i < b.length(); i++) { if (b.charAt(i) > c) c = b.charAt(i); } // Determine the lower bound of the radix BigInteger l = getBigIntegerBased10(charToInt(c) + 1); BigInteger r = v1;// Determine the upper bound of the radix // System.out.println(l + " : " + r); BigInteger m, v2; while (l.compareTo(r) <= 0) { m = l.add(r).divide(bs2); v2 = getNumber(b, m); if (v1.equals(v2)) { System.out.println(m); return; } else if (v1.compareTo(v2) < 0) { r = m.subtract(bs1); } else { l = m.add(bs1); } } System.out.println("Impossible"); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String a = scanner.next(); String b = scanner.next(); int tag = scanner.nextInt(); int radix = scanner.nextInt(); if (tag == 1) handle(a, b, radix); else handle(b, a, radix); } }
相关推荐
浙江大学PAT OJ(pat.zju.edu.cn)乙级(中文)1001-1025 题目AC代码。 本人纯手打,原创。
浙江大学Programming Ability Test《数据结构学习与实验指导》实验项目集里面30道题左右的答案。 网址http://pat.zju.edu.cn/ 做PAT里面的题时,我自己写得代码。
zju1001--1399的数据。全是.in和.out文件。
pat.zju.edu.cn上面的大部分代码,基本上都是我自己写的,不过初期的代码掉了几个 PAT (Advanced Level) Practise题组基本80个全了 PAT (Basic Level) Practise (中文)20个全了 《数据结构学习与实验指导》实验...
zju 1025 Wooden Sticks http://acm.zju.edu.cn/show_problem.php?pid=1025
zju超强代码,大概有一半的题目吧,从别人那里弄的
这个是浙江大学操作系统课程讲义,此部分为第2章,配套教材为操作系统的恐龙书
cpp codes for zju.edu.cn problems
zju电机学作业.pdf
zju部分 解题报告zju部分 解题报告
acm zju 额度cnacm zju 额度cnacm zju 额度cnacm zju 额度cnacm zju 额度cn
zju 1048 Financial Managementhttp://acm.zju.edu.cn/show_problem.php?pid=1048
acm 新手必备 浙大 解答 代码库 zoj zju
ZJU/zoj 题库上的部分题源码 本人博客: hi.baidu.com/xiaoxianxi_acm
zoj700代码,供acm爱好者研究学习,但请注意,切勿上交。
zju 1642 Match for Bonus DP,滚存??zju 1642 Match for Bonus DP,滚存??zju 1642 Match for Bonus DP,滚存??zju 1642 Match for Bonus DP,滚存??zju 1642 Match for Bonus DP,滚存??
2、课后作业题6.8 3、Minimax 给一个只有叶子节点值的图 叉掉α-β pruning 4、贝叶斯网络 5、Markov Network 给一个Mark
zju题目与解答集合,学习ACM编程不可多得的好东西。
zju动态规划试题选集 ,有ZOJ所有的动态规划题及其代码,很好的!!!
ZJU_V1.2.10.apk