/2-35进制的两个数进行相减,大于10进制的用A-Z(大写字母)补齐 如 输入:2 11 1解释:2 为2进制, 11 为被减数 1 为减数输出:0 10解释:①0为正数

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();
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值