Each input file contains one test case. Each case occupies a line which contains 4 positive integers:
$N_1$ $N_2$ tag radix
Here $N_1$ and $N_2$ each has no more than 10 digits. A digit is less than its radix and is chosen from the set {0-9, a-z} where 0-9 represent the decimal numbers 0-9, and a-z represent the decimal numbers 10-35. The last number “radix” is the radix of N1 if “tag” is 1, or of N2 if “tag” is 2.
```java //已知字符串和进制,算出对应的十进制数 public static long strToLong(String str,long radix){ long res=0; int tmp=0; for(int i=str.length()-1;i>=0;i--){ res+=map.get(str.charAt(i))*Math.pow(radix,tmp++); } return res; }
获得未知进制数中最大的字符所代表的十进制数
因为进制数一定要大于最大的字符,所以可以通过这一步获得进制的下限
1 2 3 4 5 6 7 8
String resNumStr = dataStr[resRadixNumPosi]; //获取未知进制数中最大的字符所代表的十进制数 int biggestCharInResNumStr = map.get(resNumStr.charAt(0)); for (int i = 0; i < resNumStr.length(); i++) { if (map.get(resNumStr.charAt(i)) > biggestCharInResNumStr) { biggestCharInResNumStr = map.get(resNumStr.charAt(i)); } }
/** * Created by xgh on 2016/2/21. */ publicclass_1010_Radix_25{ privatestatic HashMap<Character,Integer> map=new HashMap<Character, Integer>();
publicstaticvoidmain(String[] args){
Scanner in = new Scanner(System.in); String[] dataStr = (in.nextLine()).split(" "); int charRepNum = 10; for (char i = 'a'; i <= 'z'; i++) { map.put(i, charRepNum++); } for (int i = 0; i < 9; i++) { map.put((char) (i + 48), i); }
int givenRadixNumPosi = Integer.parseInt(dataStr[2]); long givenRadix = Integer.parseInt(dataStr[3]);
long aaa = 0; long givenNum = 0; String givenNumStr = dataStr[givenRadixNumPosi - 1]; // System.out.println(givenNumStr); // System.out.println(givenRadixNumPosi-1); // for(char e:map.keySet()){ // System.out.println(e+" ==== "+map.get(e)); // } for (int i = givenNumStr.length() - 1; i >= 0; i--) { givenNum += map.get(givenNumStr.charAt(i)) * Math.pow(givenRadix, aaa++); }
int resRadixNumPosi = 0; if (givenRadixNumPosi == 1) { resRadixNumPosi = 1; } else { resRadixNumPosi = 0; }
String resNumStr = dataStr[resRadixNumPosi]; int biggestCharInResNumStr = map.get(resNumStr.charAt(0)); for (int i = 0; i < resNumStr.length(); i++) { if (map.get(resNumStr.charAt(i)) > biggestCharInResNumStr) { biggestCharInResNumStr = map.get(resNumStr.charAt(i)); } }