罗马数字转整型(java)

import java.util.*;

public class Main {

    public static int r(String str) {
    	
    	int sum=0;
    	for(int i=0;i<str.length();i++) {
    		char c=str.charAt(i);
    		if(c=='I') sum+=1;
    		if(c=='V') sum+=5;
    		if(c=='X') sum+=10;
    		if(c=='L') sum+=50;
    		if(c=='C') sum+=100;
    		if(c=='D') sum+=500;
    		if(c=='M') sum+=1000;
    	}
    	
    	if(str.indexOf("IV")>-1)  sum-=2;
    	if(str.indexOf("IX")>-1)  sum-=2;
    	if(str.indexOf("IL")>-1)  sum-=2;
    	if(str.indexOf("IC")>-1)  sum-=2;
    	if(str.indexOf("ID")>-1)  sum-=2;
    	if(str.indexOf("IM")>-1)  sum-=2;
    	if(str.indexOf("VL")>-1)  sum-=10;
    	if(str.indexOf("VC")>-1)  sum-=10;
    	if(str.indexOf("VD")>-1)  sum-=10;
    	if(str.indexOf("VM")>-1)  sum-=10;
    	if(str.indexOf("XL")>-1)  sum-=20;
    	if(str.indexOf("XC")>-1)  sum-=20;
    	if(str.indexOf("XD")>-1)  sum-=20;
    	if(str.indexOf("XM")>-1)  sum-=20;
    	if(str.indexOf("LD")>-1)  sum-=100;
    	if(str.indexOf("LM")>-1)  sum-=100;
    	if(str.indexOf("CD")>-1)  sum-=200;
    	if(str.indexOf("CM")>-1)  sum-=200;
    	
    	return sum;
    }
	
    public static void main(String[] args) {
        
    	Scanner in=new Scanner(System.in);
    	int n=in.nextInt();
    	String[] s=new String[n];
    	for(int i=0;i<n;i++) {
    		s[i]=in.next();
    	}
    	
    	for(int i=0;i<n;i++) {
    		System.out.println(r(s[i]));
    	}
    }
}





import java.util.*;

public class Main {

    public static int r(String str) {
    	
        Map<Character,Integer> mp=new HashMap<>();
        		mp.put('I', 1);  	
        		mp.put('V', 5);  	
        		mp.put('X', 10);  	
        		mp.put('L', 50);  	
        		mp.put('C', 100);  	
        		mp.put('D', 500);  	
        		mp.put('M', 1000);
        		
        		int firstValue=0;
        		int nextValue=0;
        		int sum=0;
        		
        		for(int i=0;i<str.length();i++) {
        			firstValue=mp.get(str.charAt(i));
        			//如果是最后一个数,直接加
        			if(i==str.length()-1) {
        				sum+=firstValue;
        			}else {
        				nextValue=mp.get(str.charAt(i+i));
        				if(firstValue>=nextValue) {
        					sum+=firstValue;
        				}else {
        					sum-=firstValue;
        				}
        			}
        		}
    	return sum;
    }
	 
    public static void main(String[] args) {
        
    	Scanner in=new Scanner(System.in);
    	int n=in.nextInt();
    	String[] s=new String[n];
    	for(int i=0;i<n;i++) {
    		s[i]=in.next();
    	}
    	
    	for(int i=0;i<n;i++) {
    		System.out.println(r(s[i]));
    	}
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值