进制转换--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,还有 !"#$%&‘()*+,-./:;<=>?@[\]^_`{|}~ 等几种字符。

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实现

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

进制转换--Java实现

上一篇:注解方式定义的spring component打jar后,扫描失败的可能原因


下一篇:C++ 数字转字符串