No12&13 Integer and Roman

一、Integer to Roman

public static String intToRoman(int num) {
    String M[] = {"", "M", "MM", "MMM"};
    String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
    String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
    return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
}

将个、十、百位数的所有字符串写出来,存储在一个长度为10的数组中,把千位数所对应的字符串存储在长度为4的数组中。计算千分百十位对应的数组,然后寻找对应的字符串。

二、Roman to Integer

class Solution {
public:
    int romanToInt(string s) {
        int res = 0;
	    for (int i = s.length() - 1; i >= 0; i--) {
		    char c = s[i];
		    switch (c) {
		    case 'I':
			    res += (res >= 5 ? -1 : 1);
			    break;
		    case 'V':
		    	res += 5;
			    break;
		    case 'X':
			    res += 10 * (res >= 50 ? -1 : 1);
			    break;
		    case 'L':
			    res += 50;
			    break;
		    case 'C':
			    res += 100 * (res >= 500 ? -1 : 1);
			    break;
		    case 'D':
			    res += 500;
			    break;
		    case 'M':
			    res += 1000;
			    break;
		    }
	    }
    	return res;
    }
};

对输入的字符串,从右向左遍历,但是I、X、C可能为正,也可能为负,当I出现在V、X左边,当X出现在L、C左边,当C出现在D、M左边时,都为负数。所以要进行判定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值