`
haifengyulu
  • 浏览: 15448 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

ZJU PAT 1010 Radix

阅读更多

题目见: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);
	}

}

 

分享到:
评论

相关推荐

    ZJU PAT Basic Level 乙级1001-1025 代码

    浙江大学PAT乙级编程在线评测(OJ)是针对编程爱好者和学习者提供的一个平台,用于练习和提升编程技能。这个压缩包中包含了1001到1025题目的AC(Accepted)代码,这意味着这些代码已经成功通过了所有测试用例,可以...

    ZJU-PAT-Data-Structure-Source-code.rar_PAT test_PAT答案_PAT题集_浙大zi

    浙江大学Programming Ability Test《数据结构学习与实验指导》实验项目集里面30道题左右的答案。 网址http://pat.zju.edu.cn/ 做PAT里面的题时,我自己写得代码。

    zju.rar_ZJU_zju.rar_zju2104.cpp

    【标题】"zju.rar_ZJU_zju.rar_zju2104.cpp" 提供的信息显示,这可能是一个与浙江大学(Zhejiang University,简称ZJU)相关的编程资源包。"zju2104.cpp" 文件名暗示这可能是针对浙大某次课程或竞赛的C++代码,编号...

    zju1001-1399的数据

    标题“zju1001-1399的数据”暗示了这是一系列与浙江大学(Zhejiang University,简称ZJU)相关的编程题目或测试数据。这些数据可能被用于计算机科学竞赛、在线判题系统(如POJ、ZOJ等)或者是浙江大学计算机课程的...

    zju.rar_zju 31_zju2104.cpp

    【标题】"zju.rar_zju 31_zju2104.cpp" 指的是一个压缩包文件,其中包含了解决浙江大学(zju.edu.cn)在线编程平台上的问题的C++源代码。这个文件可能是一个参赛者或学习者提交的解决方案,用于处理特定的算法或编程...

    zju1025.rar_ZJU_acm zju 10_pid_sticks_zju 1025

    【标题】"ZJU1025 Wooden Sticks" 是浙江大学(Zhejiang University,简称ZJU)在线编程竞赛平台ACM上的一道题目,编号为1025。这道题目主要考察参赛者的算法设计和实现能力,属于计算机科学中的经典问题。 【描述...

    PAT浙江大学计算机程序设计能力考试资料集(2020.11.02).pdf

    - [牛客网上的PAT乙级试题整理](https://blog.csdn.net/Dirichlet_zju/article/details/80543516): 分享了20分真题及解析。 - [PAT乙级题目答案汇总](https://blog.csdn.net/shiliang97/article/details/104151263...

    pat网站c/c++源码

    pat.zju.edu.cn上面的大部分代码,基本上都是我自己写的,不过初期的代码掉了几个 PAT (Advanced Level) Practise题组基本80个全了 PAT (Basic Level) Practise (中文)20个全了 《数据结构学习与实验指导》实验...

    acm新手必备 浙大acm解答 代码库 zoj zju

    【标题】"acm新手必备 浙大acm解答 代码库 zoj zju" 提供的信息表明,这个压缩包包含的是ACM竞赛相关的代码,主要来自浙江大学(Zhejiang University,简称ZJU)的在线算法竞赛平台ZOJ(Zhejiang Online Judge)。...

    zju700代码 浙大oj代码

    【标题】"zju700代码 浙大oj代码" 涉及的主要知识点是浙江大学(Zhejiang University,简称ZJU)在线评测系统ZOJ(Zhejiang Online Judge)中的编程题目解决方案。ZOJ是为ACM/ICPC(国际大学生程序设计竞赛)训练而...

    ZJU OS slide 2

    根据提供的文件信息,这份文档是浙江大学操作系统课程的讲义,属于第2章的内容,教材则是被称为“操作系统的恐龙书”的资料。该讲义涉及的主题包括操作系统服务、用户操作系统界面、系统调用、系统程序、操作系统...

    zju1048.rar_acm.zju.edu._pid_show_zju acm

    【标题】"zju1048.rar_acm.zju.edu._pid_show_zju acm" 指向的是一个与浙江大学(Zhejiang University,简称ZJU) ACM竞赛相关的压缩文件,其中包含了对问题1048 "Financial Management"的解答。"acm.zju.edu." 和 ...

    zju电机学作业.pdf

    zju电机学作业.pdf

    ZJU/zoj 题库上的部分题源码

    【标题】"ZJU/zoj 题库上的部分题源码"涉及的知识点主要集中在ACM(国际大学生程序设计竞赛)编程领域,尤其是浙江大学(ZJU)ZOJ(Zhejiang University Online Judge)题库中的题目解决方案。ZOJ是一个在线编程评测...

    acm zju 额度cn

    acm zju 额度cnacm zju 额度cnacm zju 额度cnacm zju 额度cnacm zju 额度cn

    PAT浙江大学计算机程序设计能力考试资料集(2020.11.04)B.pdf

    - [PAT乙级试题整理(二)——牛客网20分真题整理](https://blog.csdn.net/Dirichlet_zju/article/details/80543516) - [PAT乙级题目答案汇总PAT(BasicLevel)Practice(中文)]...

    zoj 1140-zju 2433 简单题的部分答案

    标题 "zoj 1140-zju 2433 简单题的部分答案" 暗示了这是一个关于编程竞赛题目的解答集合,其中涵盖了ZOJ(浙江大学在线评测系统)上的两道题目——ZOJ 1140 和 ZJU 2433。这些题目可能属于算法或数据结构的范畴,...

    Leader统帅BCD-411WLLF4D5ZJU1冰箱说明书.pdf

    在此,我们将深入探讨Leader统帅BCD-411WLLF4D5ZJU1冰箱说明书中的重点内容,为用户全面了解和正确使用这款冰箱提供详细的指导。 首先,Leader统帅BCD-411WLLF4D5ZJU1冰箱是一款家用电冰箱,它被设计成可以适应多种...

    zju部分 解题报告zju部分 解题报告

    【标题】:“浙江大学(ZJU)编程竞赛解题报告” 【内容】: 浙江大学(ZJU)在编程竞赛领域有着丰富的活动,这些比赛通常包括ACM/ICPC(国际大学生程序设计竞赛)、ZOJ(浙大在线评测系统)等平台上的题目。解题...

    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,滚存??zju 1642 Match for Bonus DP,滚存??

Global site tag (gtag.js) - Google Analytics