import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//2-35进制的两个数进行相减,大于10进制的用A-Z(大写字母)补齐
public class OneQuestion {
static Map<Character, Integer> hashMap1 = new HashMap<Character, Integer>();
static Map<Integer, Character> hashMap2 = new HashMap<Integer, Character>();
static {
hashMap1.put('0', 0);
hashMap1.put('1', 1);
hashMap1.put('2', 2);
hashMap1.put('3', 3);
hashMap1.put('4', 4);
hashMap1.put('5', 5);
hashMap1.put('6', 6);
hashMap1.put('7', 7);
hashMap1.put('8', 8);
hashMap1.put('9', 9);
hashMap1.put('A', 10);
hashMap1.put('B', 11);
hashMap1.put('C', 12);
hashMap1.put('D', 13);
hashMap1.put('E', 14);
hashMap1.put('F', 15);
hashMap1.put('G', 16);
hashMap1.put('H', 17);
hashMap1.put('I', 18);
hashMap1.put('J', 19);
hashMap1.put('K', 20);
hashMap1.put('L', 21);
hashMap1.put('M', 22);
hashMap1.put('N', 23);
hashMap1.put('O', 24);
hashMap1.put('P', 25);
hashMap1.put('Q', 26);
hashMap1.put('R', 27);
hashMap1.put('S', 28);
hashMap1.put('T', 29);
hashMap1.put('U', 30);
hashMap1.put('V', 31);
hashMap1.put('W', 32);
hashMap1.put('X', 33);
hashMap1.put('Y', 34);
hashMap1.put('Z', 35);
hashMap2.put(0, '0');
hashMap2.put(1, '1');
hashMap2.put(2, '2');
hashMap2.put(3, '3');
hashMap2.put(4, '4');
hashMap2.put(5, '5');
hashMap2.put(6, '6');
hashMap2.put(7, '7');
hashMap2.put(8, '8');
hashMap2.put(9, '9');
hashMap2.put(10, 'A');
hashMap2.put(11, 'B');
hashMap2.put(12, 'C');
hashMap2.put(13, 'D');
hashMap2.put(14, 'E');
hashMap2.put(15, 'F');
hashMap2.put(16, 'G');
hashMap2.put(17, 'H');
hashMap2.put(18, 'I');
hashMap2.put(19, 'J');
hashMap2.put(20, 'K');
hashMap2.put(21, 'L');
hashMap2.put(22, 'M');
hashMap2.put(23, 'N');
hashMap2.put(24, 'O');
hashMap2.put(25, 'P');
hashMap2.put(26, 'Q');
hashMap2.put(27, 'R');
hashMap2.put(28, 'S');
hashMap2.put(29, 'T');
hashMap2.put(30, 'U');
hashMap2.put(31, 'V');
hashMap2.put(32, 'W');
hashMap2.put(33, 'X');
hashMap2.put(34, 'Y');
hashMap2.put(35, 'Z');
}
/**
*
* @param base 进制
* @param minuend 被减数
* @param subtrahend 减数
* @return 返回map key:0正1负 value:得到的结果
*/
public static Map<Integer,String> oneQuestion(int base, String minuend, String subtrahend){
Map<Integer,String> map = new HashMap<>();
if(base > 35 || base < 2){
map.put(-1,"输入格式不正确");
return map;
}
StringBuffer stringBuffer =new StringBuffer();
for(int i = 0; i< base;i++){
stringBuffer.append(hashMap2.get(i));
}
char[] chars = minuend.toCharArray();
int minuendInt =0;
int ilength = chars.length - 1;
for (int i =ilength ;i >= 0;i--) {
String string = Character.toString(chars[i]);
if(!stringBuffer.toString().contains(string)){
map.put(-1,"被减数输入格式不正确");
return map;
}
System.out.println((int)Math.round(Math.pow(base,i)));
System.out.println(hashMap1.get(chars[i]));
minuendInt+=(int)Math.round(Math.pow(base,i))*hashMap1.get(chars[ilength-i]);
}
char[] chars1 = subtrahend.toCharArray();
int subtrahendInt =0;
int i1length = chars1.length - 1;
for (int i =i1length ;i >= 0;i--) {
String string = Character.toString(chars1[i]);
if(!stringBuffer.toString().contains(string)){
map.put(-1,"减数输入格式不正确");
return map;
}
subtrahendInt+=(int)Math.round(Math.pow(base,i))*hashMap1.get(chars1[i1length-i]);
}
System.out.println("被减数:"+minuendInt);
System.out.println("减数:"+subtrahendInt);
int value =minuendInt - subtrahendInt;
int abs = Math.abs(value);
if(value >= 0){
map.put(0,getString(abs,base));
}else{
map.put(1,getString(abs,base));
}
return map;
}
private static String getString(int abs,int base){
int number =abs;
List<String> list = new ArrayList<>();
while (number >= base) {
int i = number % base;
number = number / base;
if(i > 9){
list.add(hashMap2.get(i).toString());
}else {
list.add(i+"");
}
}
int k = number % base;
if(k > 9){
list.add(hashMap2.get(k).toString());
}else {
list.add(k+"");
}
StringBuffer finalResult=new StringBuffer();
for (int i = list.size()-1; i >= 0; i--) {
finalResult.append(list.get(i));
}
return finalResult.toString();
}
}