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);
}
}
进制转换
最新推荐文章于 2023-02-18 09:36:13 发布