做动漫网站用什么程序,如何推广品牌知名度,搜索引擎 网站推广,新零售12. 整数转罗马数字 罗马数字包含以下七种字符#xff1a; 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 写做 XI…12. 整数转罗马数字 罗马数字包含以下七种字符 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。 给你一个整数将其转为罗马数字。 Swift
解法一模拟遍历法
列出各种罗马字符对应数字列表 注意数字是从高位开始转换因此从大到小开始遍历数字每次减去已使用的罗马字母所对应的数字继续遍历直至列出所有的罗马数字
func intToRoman(_ num: Int) - String {//先将各种值列举出来从大到小排好序let valueSymbols: [[Int:String]] [[1000:M],[900:CM], [500:D], [400:CD], [100:C],[90:XC], [50:L],[40:XL],[10:X],[9:IX],[5:V], [4:IV], [1:I]]var x num;var result //拿到数值从大到小取并减去罗马字母对应的值继续比较for item:[Int:String] in valueSymbols {let value item.keys.first!let symbol item.values.first!while x value {result symbol;x x - value}if x 0 {break}}return result}解法二硬编码数字
观察上述对应关系可将千百十个位的所有情况列出
func intToRoman(_ num: Int) - String {let thounds [, M, MM, MMM]let hundrand [, C, CC, CCC, CD, D, DC, DCC, DCCC, CM]let tens [, X, XX, XXX, XL, L, LX, LXX, LXXX, XC ]let ones [, I, II, III, IV, V, VI, VII, VIII, IX]return thounds[num/1000] hundrand[num % 1000 / 100] tens[num%100/10] ones[num%10]}OC
解题思路同上。
解法一
- (NSString *)intToRoman:(NSInteger)num {NSArray *valueSymbols [{1000:M},{900:CM},{500:D},{400:CD},{100:C},{90:XC},{50:L},{40:XL},{10:X},{9:IX},{5:V},{4:IV},{1:I}];NSString *result ;for (NSDictionary *dic in valueSymbols) {NSInteger key [dic.allKeys.firstObject integerValue];NSString *symbol [dic.allValues.firstObject stringValue];while (num key) {result [result stringByAppendingString:symbol];num - key;}if (num 0) {break;}}return result;
}解法二
- (NSString *)intToRoman:(NSInteger)num {NSArray *thounds [, M, MM, MMM];NSArray *hundrand [, C, CC, CCC, CD, D, DC, DCC, DCCC, CM];NSArray * tens [, X, XX, XXX, XL, L, LX, LXX, LXXX, XC ];NSArray * ones [, I, II, III, IV, V, VI, VII, VIII, IX];NSString *result [[[thounds[num/1000] stringByAppendingString:hundrand[num % 1000 / 100]] stringByAppendingString:tens[num%100/10]] stringByAppendingString:ones[num%10]];return result;
}