给个网站能看的,营销型网站建设中坚站,长沙室内设计公司排名,手机 字体 wordpress罗马数字包含以下七种字符:I#xff0c;V#xff0c;X#xff0c;L#xff0c;C,D和M。 例如#xff0c;罗马数字2写做 II #xff0c;即为两个并列的 1。12 写做XII#xff0c;即为XII。27写做 XXVII,即为XXV II 。 通常情况下#xff0c;罗马数字中小的数字在大的数字…罗马数字包含以下七种字符:IVXLC,D和M。 例如罗马数字2写做 II 即为两个并列的 1。12 写做XII即为XII。27写做 XXVII,即为XXV 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。 给你一个整数将其转为罗马数字。
C#处理逻辑如下 private class Romanner{/// summary/// 数字/// /summarypublic int Num { get; set; }/// summary/// 罗马数/// /summarypublic string Roman { get; set; }}private ListRomanner _romanners new ListRomanner(){new Romanner(){Num1,RomanI},new Romanner(){Num4,RomanIV},new Romanner(){Num5,RomanV},new Romanner(){Num9,RomanIX},new Romanner(){Num10,RomanX},new Romanner(){Num40,RomanXL},new Romanner(){Num50,RomanL},new Romanner(){Num90,RomanXC},new Romanner(){Num100,RomanC},new Romanner(){Num400,RomanCD},new Romanner(){Num500,RomanD},new Romanner(){Num900,RomanCM},new Romanner(){Num1000,RomanM}};public string GetRotmanNumbers(int num)
{// 案例// 3 III// 4 IV// 7 VII// 9 IX 10 1// 58 LVIII 50 5 1 1 1// 299 CCIC// 499 ID// 1994 MCMXCIV 1000 100 1000 10 100 1 5// 2999 MMCMXCIX// 472 CDLXXIIStringBuilder sb new StringBuilder();var maxRommaner _romanners.OrderByDescending(t t.Num).First();while (num 0){//大于区间范围内的值if (num maxRommaner.Num){sb.Append(maxRommaner.Roman);num num - maxRommaner.Num;}// 在定义区间范围内的值else{for (int i 0; i _romanners.Count; i){// 指定区间if (num _romanners[i].Num){sb.Append(_romanners[i].Roman);num num - _romanners[i].Num;break;}else if (num _romanners[i].Num){var previousRomanner _romanners[i - 1];num num - previousRomanner.Num;sb.Append(previousRomanner.Roman);break;}}}}return sb.ToString();
}
参考写法readonly Tupleint, string[] valueSymbols {new Tupleint, string(1000, M),new Tupleint, string(900, CM),new Tupleint, string(500, D),new Tupleint, string(400, CD),new Tupleint, string(100, C),new Tupleint, string(90, XC),new Tupleint, string(50, L),new Tupleint, string(40, XL),new Tupleint, string(10, X),new Tupleint, string(9, IX),new Tupleint, string(5, V),new Tupleint, string(4, IV),new Tupleint, string(1, I)};public string IntToRoman(int num){StringBuilder roman new StringBuilder();foreach (Tupleint, string tuple in valueSymbols){int value tuple.Item1;string symbol tuple.Item2;while (num value){num - value;roman.Append(symbol);}if (num 0){break;}}return roman.ToString();}