每日算法之十二:Roman to Integer

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

class Solution {
public:
	int toNUm(char ch)
	{
		switch(ch)
		{
			case 'I':return 1;
			case 'V':return 5;
			case 'X':return 10;
			case 'L':return 50;
			case 'C':return 100;
			case 'D':return 500;
			case 'M':return 1000;
			default:return 0;
		}
	}
    int romanToInt(string s) {
    	int num = 0;
    	for(int i = 0;i<s.size();i++)
    	{
    		if(toNUm(s[i])>=toNUm(s[i+1]))
    			num += toNUm(s[i]);
    		else
    			num -= toNUm(s[i]);
    	}
    	return num;
        
    }
};

罗马数字

你肯定见过罗马数字,即使你不认识他们。你可能在版权信息、老电影、电视、大学或者图书馆的题词墙看到(用CopyrightMCMXLVI表示版权信息,而不是用?“Copyrigh1946。你也可能在大纲或者目录参考中看到他们。这种系统的数字表达方式可以追溯到罗马帝国(因此而得名)。在罗马数字中,有七个不同的数字可以以不同的方式结合起来表示其他数字。
  I=1
  V=5
  X=10
  L=50
  C=100
  D=500
  M=1000
下面是几个通常的规则来构成罗马数字:

  大部分时候用字符相叠加来表示数字。I 是1,II 是2,III 是3。VI 是6(挨个看来,是"5和1"的组合)VII 是7,VIII 是8


 含有10 的字符(I,X,C 和M)最多可以重复出现三个。为了表示4,必须用同一位数的下一个更大的数字5 来减去一。不能用IIII 来表示4,而应该是IV(意思是比5 小1)。40 写做XL(比50 小10),41 写做 XLI,42 写做XLII,43 写做 XLIII,44 写做XLIV(比50 小10 并且比5 小 1)。

 

  有些时候表示方法恰恰相反。为了表示一个中间的数字,需要从一个最终的值来减。比如:9 需要从10 来减:8 是VIII,但9 确是IX(比10 小1),并不是VIII(I 字符不能重复4 次)。90 是XC,900 是CM。


  表示5 的字符不能在一个数字中重复出现。10 只能用X 表示,不能用VV 表示。100 只能用C 表示,而不是LL。

 

  罗马数字是从左到右来计算,因此字符的顺序非常重要。DC表示600,而CD 完全是另一个数字400(比500 小100)。CI是101,IC 不是一个罗马数字(因为你不能从100 减1,你只能写成XCIX,表示比100 小10,且比10 小1)。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值