网站建设万网,正规网站建设公司多少钱,手表常用网站,html常用代码罗马数字转整数 罗马数字包含以下七种字符: I#xff0c; V#xff0c; X#xff0c; L#xff0c;C#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如#xff0c; 罗马数字 2 写做 II #xff0c;即为两个并列的 1 。12 写做 XII #xff0c;…罗马数字转整数 罗马数字包含以下七种字符: I V X LCD 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如 罗马数字 2 写做 II 即为两个并列的 1 。12 写做 XII 即为 X II 。 27 写做 XXVII, 即为 XX V II 。 通常情况下罗马数字中小的数字在大的数字的右边。但也存在特例例如 4 不写做 IIII而是 IV。数字 1 在数字 5 的左边所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况 I 可以放在 V (5) 和 X (10) 的左边来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边来表示 400 和 900。 给定一个罗马数字将其转换成整数。 分析 正常情况下罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况那么可以将每个字符视作一个单独的值累加每个字符对应的数值即可。 例如 XXVII 可视作 XXVII101051127。 特殊情况只需要考虑 “当前位置的元素比下个位置的元素小就减去当前值”
结论当前位置的元素比下个位置的元素小就减去当前值否则加上当前值
Swift
func romanToInt(_ s: String) - Int {let symbols:[Character: Int] [I:1,V:5,X:10,L:50,C:100,D:500,M:1000]var result: Int 0;let n s.countfor i in 0..n {let symbol:Character s[s.index(s.startIndex, offsetBy: i)]let value:Int symbols[symbol]!if in-1 value symbols[s[s.index(s.startIndex, offsetBy: i1)]]! {result - value}else {result value}}return result}OC
- (NSInteger)romanToInt:(NSString *)s {NSDictionary *symbols {I:1,V:5,X:10,L:50,C:100,D:500,M:1000};NSInteger result 0;NSInteger len s.length;for (NSInteger i0; ilen; i) {NSInteger value [symbols[[s substringWithRange:NSMakeRange(i, 1)]] integerValue];if (ilen-1 value [symbols[[s substringWithRange:NSMakeRange(i1, 1)]] integerValue]) {result - value;}else {result value;}}return result;
}