⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3084692_ac_234ms_4456k.java

📁 北大大牛代码 1240道题的原代码 超级权威
💻 JAVA
字号:
import java.util.*;

public class Main{
	
	static Map rom = new HashMap(); 
	static int[] limit = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
	static String[] roms = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
	public static void main(String [] args){
		
		rom.put(Character.valueOf('O'), Integer.valueOf(0));
		rom.put(Character.valueOf('I'), Integer.valueOf(1));
		rom.put(Character.valueOf('V'), Integer.valueOf(5));
		rom.put(Character.valueOf('X'), Integer.valueOf(10));
		rom.put(Character.valueOf('L'), Integer.valueOf(50));
		rom.put(Character.valueOf('C'), Integer.valueOf(100));
		rom.put(Character.valueOf('D'), Integer.valueOf(500));
		rom.put(Character.valueOf('M'), Integer.valueOf(1000));
		new Main().solve();
	}
	
	private void solve(){
		
		Scanner cin = new Scanner (System.in);
		String tmp, str;
		int reg[] = new int[100];
		int id, num, i;
		boolean error;
		
		error = false;
		while(true){
			tmp = cin.next();
			if(tmp.charAt(0)=='R'){
				reset(reg);
				System.out.println("Ready");
			}
			else{
				if(tmp.charAt(0)=='Q'){
					break;
				}
				else{
					num = 0;
					error = false;
					i = tmp.indexOf('=');
					id = Integer.parseInt(tmp.substring(0,i));
					tmp = tmp.substring(i+1);
					for(i = 0; i < tmp.length()&&tmp.charAt(i)!='+'&&tmp.charAt(i)!='-'; i++);
					str = tmp.substring(0,i);
					if(Character.isDigit(str.charAt(0))){
						num = reg[Integer.valueOf(str)];
					}
					else{
						num = getNum(str);
					}
					if(num == -1)
						error = true;
					while(!error&&i!=tmp.length()){
						int tn;
						tmp = tmp.substring(i);
						char op = tmp.charAt(0);
						for(i = 1; i < tmp.length()&&tmp.charAt(i)!='+'&&tmp.charAt(i)!='-'; i++);
						str = tmp.substring(1,i);
						if(Character.isDigit(str.charAt(0))){
							tn = reg[Integer.valueOf(str)];
						}
						else{
							tn = getNum(str);
						}
						if(tn==-1){
							error = true;
							break;
						}
						else{
							if(op=='+'){
								num += tn;
							}
							else{
								num -= tn;
							}
						}
					}
					if(num < 0 || num > 10000)
						error = true;
					if(error){
						System.out.println("Error");
					}
					else{
						reg[id] = num;
						System.out.println(id+"="+turn(num));
					}
				}
			}
		}
		System.out.println("Bye");
	}
	
	private String turn(int num) {
		
		String ret = "";
		
		for (int i = 0; i < limit.length; i++) {
			while (num >= limit[i]) {
				num -= limit[i];
				ret += roms[i];
			}
		}
		if(ret.length()==0)
			ret = "O";
		return ret;
	}

	private int getNum(String str) {

		int ret, prev;
		
		ret = 0;prev = 10000;
		for(int i = 0; i < str.length(); i++){
			int t = ((Integer)rom.get(Character.valueOf(str.charAt(i)))).intValue();
			if(t > prev){
				ret -= (prev<<1);
			}
			ret += t;
			prev = t;
		}
		return ret;
	}

	private void reset(int []reg){
		Arrays.fill(reg, -1);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -