进制转换--Java实现

题目详情

我们通常用的十进制数包含0-9十个数字。假设有一种进制系统包含3种数字,从低到高分别为"oF8”,那么从1到9分别表示为F, 8, Fo, FF, F8, 8o, 8F, 88, Foo。给定一种进制的数和两种进制的数字表,请把它从第一种进制转换为第二种进制。

输入格式:

第一行是T表示测测试数据组数。(0<T<=200)。

以后T行,每行有3个部分:

number number_table1 number_table2

其中number_table1和number_table2表示从第一种进制的数字表和第二种进制的数字表。(数字由低到高。)

number是第一种进制的一个数。

数字表可能包含的字符是数字0-9,还有 !"#$%&‘()*+,-./:;<=>[email protected][\]^_`{|}~ 等几种字符。

1<=number<=1000000000 (十进制)。

输出格式:

先输出Case #数目,再输出第二种进制下的数。 详见样例。

输入样例:

4

9 0123456789 oF8

Foo oF8 0123456789

13 0123456789abcdef 01

CODE O!CDE? A?JM!.

输出样例:

Case #1: Foo

Case #2: 9

Case #3: 10011

Case #4: JAM!

解题思路:

只不过是普通的进制转换,只是将0123等表示进制的数字换成可其他字符。比如样例中给出的"oF8”,可以将它看作是一个三进制,即“012”。

“三进制”到“十进制”的转换:如F8,换成十进制就是:“8”*3^0+“F”*3^1=2*3^0+1*3^1=2+3=5;

“十进制”到“三进制”的转换:短除法:5除以3,商1余2,;商数1除以3,商0余1;那么对应的三进制就是“12”,对应的“oF8”字符就是“F8”。

Java代码:

代码获取地址:https://github.com/liuhao123/ACM

package com.liuhao.acm.csdn;

import java.util.Scanner;

public class Convert {

	@SuppressWarnings("resource")
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		final int T = Integer.parseInt(sc.next()); // T组数据

		String[] srcArr = new String[T]; //存放原进制数据
		String[] str1Arr = new String[T]; //存放第一种进制的数字表
		String[] str2Arr = new String[T]; //存放第二种进制的数字表
		String[] outArr = new String[T]; //存放转换后的数据

		// 读入输入数据,并保存到相应数组
		for (int i = 0; i < T; i++) {
			srcArr[i] = sc.next();
			str1Arr[i] = sc.next();
			str2Arr[i] = sc.next();
		}

		for (int i = 0; i < T; i++) {
			outArr[i] = convert(srcArr[i], str1Arr[i], str2Arr[i]);
			System.out.println("Case #" + (i+1) + ": " + outArr[i]);
		}
	}

	/**
	 * @param src 第一种进制的数据
	 * @param str1  第一种进制的数字表
	 * @param str2  第二种进制的数字表
	 * @return 转换后的第二种进制的数据
	 */
	private static String convert(String src, String str1, String str2) {

		int len1 = str1.length();
		int len2 = str2.length();

		int mod = 1;
		int value = 0;// 存放中间十进制数

		StringBuilder out = new StringBuilder("");// 存放转换后的数据

		char[] charArr = src.toCharArray();

		// 将输入转化为10进制
		for (int i = charArr.length - 1; i >= 0; i--) {
			int temp = str1.indexOf(charArr[i]);
			value += temp * mod;
			mod *= len1;
		}

		// 将10进制数转化问目标进制数
		while (value > 0) {
			out.append(str2.charAt(value % len2));
			value /= len2;
		}

		return out.reverse().toString();
	}

}

测试结果:

进制转换--Java实现,布布扣,bubuko.com

时间: 2024-10-21 07:45:05

进制转换--Java实现的相关文章

进制转换 JAVA

1.十进制-->二进制(方法一) 1 /* 2 十进制-->二进制(方法一) 3 */ 4 class DecToBin1 5 { 6 public static void main(String[] args) 7 { 8 toBin(6); 9 } 10 11 public static void toBin(int num) 12 { 13 StringBuffer sb = new StringBuffer(); //容器 14 while(num>0) 15 { 16 sb.a

Java进制转换

java进制转换java中进行二进制,八进制,十六进制,十进制间进行相互转换 十进制转成十六进制:Integer.toHexString(int i) 十进制转成八进制Integer.toOctalString(int i) 十进制转成二进制Integer.toBinaryString(int i) 十六进制转成十进制Integer.valueOf("FFFF",16).toString() 八进制转成十进制Integer.valueOf("876",8).toSt

01、Java基础语法(常量、进制转换、原/反/补码、变量和数据类型)

1.常量 2.进制转换 3.原码.反码和补码 4.变量和数据类型 1.常量 常量:在程序执行过程中其值不发生改变. Java中常量的分类: 字面值常量: 自定义常量:(面向对象讲解,static final) 字面值常量的分类: 字符串常量:(用双引号引起来的内容, "HelloWorld") 整数常量:(所有整数,12,23) 字符常量:(用单引号引起来的内容,'A','1','中') 小数常量:(所有小数,3.14) 布尔常量:(只有true和false) 空常量null:(数组部

java 16进制转换10进制

public static String toHexString2(byte[] b) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < b.length; ++i) { buffer.append(toHexString2(b[i])); } return buffer.toString(); } public static String toHexString2(byte b) { char[] buffer =

Java 10进制转2、8、16进制转换 / 2、8、16进制转10进制转换

public static void main(String[] args) { int i = 10; System.out.println("***********10进制转换2进制.8进制.16进制************"); System.out.println(Integer.toBinaryString(i)); // 10转换2进制 System.out.println(Integer.toOctalString(i)); // 10转换8进制 System.out.p

java中的进制转换

进制转换 首先是十进制转化为其他进制,如二进制,八进制,十六进制: 它们在java中都有专门的函数可供调用: 如:十进制转化为二进制时调用toBinaryString(); 十进制转化为八进制时调用toOctalString(); 十进制转化为十六进制时调用toHexString(); 代码实现: // 进制转化 public class Main_2 { public static void main(String[] args) { Integer a=new Integer(20); //

利用java中的BigInteger实现进制转换

[原创] java中的进制BigInteger十分的强大,而且好用,他可以表示任意大的整数,同时还可以进行进制转换,十分的方便, 代码示例: 1 package com.jiajia.demo_1; 2 import java.math.BigInteger;//导入该包 3 public class Demo { 4 public static void main(String[] args) { 5 String str = new BigInteger("15", 10).toS

Java的进制转换操作(十进制、十六进制、二进制)

2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. 1.十进制 转 十六进制: 2.十进制 转 二进制 3.十六进制 转 十进制: 4.十六进制 转 二进制: 5.二进制转 十进制: 6.二进制转十六进制: Java的进制转换操作(十进制.十六进制.二进制),布布扣,bubuko.com

java byte 16进制转换

整型转16进制: int devIdInt = Integer.parseInt(devId); String devIdString = Integer.toHexString(devIdInt); 16进制转为字节: byte devBin = (byte) Integer.parseInt(devIdString, 16); byte devBin =Integer.valueOf(devIdString, 16).byteValue(); byte devBin =Byte.parseB