ブルーブリッジカップJAVA


もっとJAVA版解答移歩我的博客:蓝桥杯JAVA版解答まとめ
本題の考査
シミュレーション
構想
構想は簡単で余計なことをしないで、テーマの要求ははっきりしている.
  • 進数変換を容易にするため:X進数変換10進数はLong.valueOf(num, X)(このときnumはX進数)10進数変換Y進数はLong.toString(num, Y)(このときnumは10進数)
  • を用いる.
  • いくつかの無視しやすい点:
  • 本題では中間変数が263未満であるため、Longタイプ
  • を用いるべきである.
  • javaのデフォルトの進数変換アルファベットは、小文字を大文字に変換する
  • です.
  • clear操作の後にはchange操作が続くので、changeを行う場合にはそのときの結果resultが空文字列であるか否かを判断し、そうでなければresultを目標進数
  • に変換する.

    ACコード
    import java.util.Scanner;
    public class Main {
         
    	static String result="";
    	static String temp="";
    	static String cal="";
    	static int radix=10;
    	
    	static void add() {
         cal="add";}									//  
    	static void sub() {
         cal="sub";}									//  
    	static void mul() {
         cal="mul";}									//  
    	static void div() {
         cal="div";}									//  
    	static void mod() {
         cal="mod";}									//  
    	static void clear() {
         result="";	temp=""; cal="";}				//  
    	static void equal() {
         System.out.println(result.toUpperCase());}	//    
    	static void change(int newRadix) {
         								//    
    		if(!result.equals("")) {
         
    			long oldValue = Long.valueOf(result, radix);
    			result = Long.toString(oldValue, newRadix);
    		}
    		radix = newRadix;
    	}
    	static void num(String num) {
         									//     
    		if(result.equals(""))	result=num;
    		else {
         
    			temp=num;
    			if(cal.equals("add"))		result = Long.toString((Long.valueOf(result, radix)+Long.valueOf(temp, radix)), radix);
    			else if(cal.equals("sub"))	result = Long.toString((Long.valueOf(result, radix)-Long.valueOf(temp, radix)), radix);
    			else if(cal.equals("mul"))	result = Long.toString((Long.valueOf(result, radix)*Long.valueOf(temp, radix)), radix);
    			else if(cal.equals("div"))	result = Long.toString((Long.valueOf(result, radix)/Long.valueOf(temp, radix)), radix);
    			else						result = Long.toString((Long.valueOf(result, radix)%Long.valueOf(temp, radix)), radix);
    		}
    	}
    
    	public static void main(String[] args) {
         
    		Scanner scaner = new Scanner(System.in);
    		int round = scaner.nextInt();
    		for (int i = 0; i < round; i++) {
         
    			String command = scaner.next();
    			if(command.equals("CLEAR"))			clear();
    			else if(command.equals("EQUAL"))	equal();
    			else if(command.equals("CHANGE"))	change(scaner.nextInt());
    			else if(command.equals("ADD"))		add();
    			else if(command.equals("SUB"))		sub();
    			else if(command.equals("MUL"))		mul();
    			else if(command.equals("DIV"))		div();
    			else if(command.equals("MOD"))		mod();
    			else								num(scaner.next());
    		}
    		scaner.close();
    	}
    }