进制转换

package cn.com.crc.ems.travel;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class Test
{
	private static HashMap<Integer, String> regMap = new HashMap<Integer, String>();
	private static HashMap<Character, Integer> tenValueMap = new HashMap<Character, Integer>();
	
	static
	{
		regMap.put(2, getReg("01"));
		regMap.put(3, getReg("012"));
		regMap.put(4, getReg("0123"));
		regMap.put(5, getReg("01234"));
		regMap.put(6, getReg("012345"));
		regMap.put(7, getReg("0123456"));
		regMap.put(8, getReg("01234567"));
		regMap.put(9, getReg("012345678"));
		regMap.put(10, getReg("0123456789"));
		regMap.put(11, getReg("0123456789A"));
		regMap.put(12, getReg("0123456789AB"));
		regMap.put(13, getReg("0123456789ABC"));
		regMap.put(14, getReg("0123456789ABCD"));
		regMap.put(15, getReg("0123456789ABCDE"));
		regMap.put(16, getReg("0123456789ABCDEF"));
		regMap.put(17, getReg("0123456789ABCDEFG"));
		regMap.put(18, getReg("0123456789ABCDEFGH"));
		regMap.put(19, getReg("0123456789ABCDEFGHI"));
		regMap.put(20, getReg("0123456789ABCDEFGHIJ"));
		
		tenValueMap.put('0', 0);
		tenValueMap.put('1', 1);
		tenValueMap.put('2', 2);
		tenValueMap.put('3', 3);
		tenValueMap.put('4', 4);
		tenValueMap.put('5', 5);
		tenValueMap.put('6', 6);
		tenValueMap.put('7', 7);
		tenValueMap.put('8', 8);
		tenValueMap.put('9', 9);
		tenValueMap.put('A', 10);
		tenValueMap.put('B', 11);
		tenValueMap.put('C', 12);
		tenValueMap.put('D', 13);
		tenValueMap.put('E', 14);
		tenValueMap.put('F', 15);
		tenValueMap.put('G', 16);
		tenValueMap.put('H', 17);
		tenValueMap.put('I', 18);
		tenValueMap.put('J', 19);
	}
	
	private static String getReg(String str)
	{
		StringBuilder sb = new StringBuilder("");
		return sb.append("[").append(str).append("]+\\s*\\+\\s*[").append(str).append("]+\\s*=\\s*[").append(str).append("]+").toString();
	}
	
	private static int changeToTenValue(String sourceStr, int radix)
	{
		int tenValue = 0;
		for(int i=sourceStr.length()-1,j=0; i>=0; i--,j++)
		{
			tenValue += getMiValue(radix, j) * tenValueMap.get(sourceStr.charAt(i));
		}
		
		return tenValue;
	}
	
	private static int getMiValue(int radix, int j)
	{
		int result = 1;
		for(int k=1; k<=j; k++)
		{
			result = result * radix;
		}
		
		return result;
	}
	
	private static void go(String mathString)
	{
		List<Integer> resultList = new ArrayList<Integer>();
		Set<Integer> regKeySet = regMap.keySet();
		Iterator<Integer> keyIter = regKeySet.iterator();
		while(keyIter.hasNext())
		{
			int key = keyIter.next();
			if(!(mathString.matches(regMap.get(key))))
			{
				//不符合当前进制格式
				continue;
			}
			
			String[] a1 = mathString.split("=");
			String[] a2 = a1[0].split("\\+");
			
			int num1 = changeToTenValue(a2[0].trim(), key);
			int num2 = changeToTenValue(a2[1].trim(), key);
			int num3 = changeToTenValue(a1[1].trim(), key);
			
			System.out.println(key + ": " + num1 + " + " + num2 + " = " + num3);
			
			if((num1 + num2) == num3)
			{
				resultList.add(key);
			}
		}
		
		System.out.println("有" + resultList.size() + "种进制符合, 分别为:");
		for(Integer i : resultList)
		{
			System.out.println(i);
		}
	}
	
	public static void main(String[] args)
	{
		String str = "ABCD+211=B000";
		//String str = "1 + 1 =2";
		go(str);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值