PREV-55 小计算器 (进制转换)

2 篇文章 0 订阅
题目:
几个需要注意的点:
  • CLEAR指令:重制计算,相当于计算机中的C按钮
  • CHANGE K指令:改变的是整个运算的进制,不是单独改变某个数的进制,如输入1024后,改变为二进制再加上100000(二进制数),最后输出的进制也是当前二进制数
  • 如何解决不同进制之间的运算:把所有输入的数先转为十进制进行运算,然后最后输出的时候再按照之前的进制进行输出
    • Integer.parseInt(数, 数对应的进制)/Integer.valueOf(数, 数对应的进制) ----- 将不同进制数转为十进制数
    • Integer.toString(十进制数, 指定进制) ----- 将十进制数转为对应进制数
AC代码
import java.util.Scanner;
public class Main {
        // 默认10进制
        public static int Radix = 10;
        // 数字x
        public static Long x;
        // 运算符
        public static String operation = "null";
        // 运算结果
        public static Long RES = -1L;
        // 进制转换指令
        public static final String CHANGE = "CHANGE";
        // 输入的数字NAM X
        public static final String NUM = "NUM";

        // 运算指令
        public static final String ADD = "ADD";
        public static final String SUB = "SUB";
        public static final String MUL = "MUL";
        public static final String DIV = "DIV";
        public static final String MOD = "MOD";

        // 输出指令
        public static final String EQUAL = "EQUAL";

        // 重制指令
        public static final String CLEAR = "CLEAR";


        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            // 指令的数量
            int times = s.nextInt();

            while (times >= 0) {

                // 接受输入的指令
                String cmd = s.nextLine();
                String[] words = cmd.split(" ");
                switch (words[0]) {
                    case CLEAR:
                        x = 0L;
                        RES = -1L;
                        operation = "null";
                        break;
                    case NUM:
                        // 以radix进制的数转10进制
                        x = Long.parseLong(words[1], Radix);

                        if (RES < 0) {
                            RES = x;
                        }

                        switch (operation) {
                            case "null":
                                break;
                            case "add":
                                RES += x;
                                break;
                            case "sub":
                                RES -= x;
                                break;
                            case "mul":
                                RES *= x;
                                break;
                            case "div":
                                RES /= x;
                                break;
                            case "mod":
                                RES %= x;
                                break;
                        }
                        break;
                    case CHANGE:
                    	// 改变进制
                        Radix = Integer.parseInt(words[1]);
                        break;
                    case ADD:
                        operation = "add";
                        break;
                    case SUB:
                        operation = "sub";
                        break;
                    case MUL:
                        operation = "mul";
                        break;
                    case DIV:
                        operation = "div";
                        break;
                    case MOD:
                        operation = "mod";
                        break;
                    case EQUAL:
                        // 将结果运算结果以radix进制输出
                        System.out.println(Long.toString(RES, Radix).toUpperCase());
                }
                times--;
            }
        }
    }
收获:
  • Java中自带的进制转换API

    1. Integer.parseInt(数, 数对应的进制)/Integer.valueOf(数, 数对应的进制) ----- 将不同进制数转为十进制数
    2. Integer.toString(十进制数, 指定进制) ----- 将十进制数转为对应进制数
  • Scanner类中next()系列方法

    1. nextInt() 输入整数
    2. nextLine() 输入字符串包含空格
    3. next() 输入字符串不能包含空格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值