您的位置:首页 > 编程语言 > C#

【LeetCode】C# 12、Integer to Roman

2017-10-08 08:57 295 查看
Given an integer, convert it to a roman numeral.

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

把给定的整数转化为罗马数字。

罗马数字的符号一共只有7个:I(代表1)、V(代表5)、X(代表10)、L(代表50)、C代表100)、D(代表500)、M(代表1,000).这7个符号位置上不论怎样变化,它所代表的数字都是不变的.它们按照下列规律组合起来,就能表示任何数。

下面是别人的算法,事先建立一个储存个十百千位的表后,按罗马数字排列规律写出某一位的循环即可。

原博:http://www.cnblogs.com/etcow/archive/2012/09/13/2684057.html

public class Solution {
public string IntToRoman(int num) {
string res = "";
int[] arr = new int[4];
for(int i = 0;i<4;i++){
arr[i] = num % (int)Math.Pow(10, i + 1) / (int)Math.Pow(10, i);
}
for(int i = 3;i >= 0;i--){
if (arr[i] != 0)
{
if (i == 3)
res += D1000[arr[i] - 1];
if (i == 2)
res += D100[arr[i] - 1];
if (i == 1)
res += D10[arr[i] - 1];
if (i == 0)
res += D1[arr[i] - 1];
}
}
return res;
}
static string[] D1 = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
static string[] D10 = { "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
static string[] D100 = { "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
static string[] D1000 = { "M", "MM", "MMM" };
}


或者把罗马数字中的表达形式罗列出来,然后将num从大到小分别与其对应,很简洁。

http://blog.csdn.net/beiyeqingteng/article/details/8547565

int[] val = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] strs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};

StringBuilder sb = new StringBuilder();

for(int i=0;i<val.Length;i++) {
while(num >= val[i]) {
num -= val[i];
sb.Append(strs[i]);
}
}
return sb.ToString();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode c#