Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a224311

Browse files
committed
罗马数字solution
1 parent bf98c83 commit a224311

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

‎solution/solution.php‎

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
/**
3+
* [solution description] 转化为罗马数字
4+
* @param [type] $roman [description]
5+
* @return [type] [description]
6+
*/
7+
function solution ($roman) {
8+
$number = 0;
9+
$symbolArr = [
10+
'I' => 1,
11+
'V' => 5,
12+
'X' => 10,
13+
'L' => 50,
14+
'C' => 100,
15+
'D' => 500,
16+
'M' => 1000,
17+
];
18+
// 循环字符串
19+
for ($i = 0; $i < strlen($roman); $i++) {
20+
// 对应字符串的字符在罗马数组的值
21+
$value = $symbolArr[$roman[$i]];
22+
// 若$i 等于 该字符串的最后一个或者 $i后一个的值小于当前的值则相加
23+
if ($i == strlen($roman) - 1 || $symbolArr[$roman[$i + 1]] <= $value) {
24+
$number += $value;
25+
} else { // 否则减去 排除如 CD, XC这种情况
26+
$number -= $value;
27+
}
28+
29+
}
30+
return $number;
31+
}
32+
33+
function solution_clever ($roman) {
34+
$number = 0;
35+
$numerals = array("CM" => 900, "M" => 1000, "CD" => 400, "D" => 500, "XC" => 90, "C" => 100, "XL" => 40, "L" => 50, "IX" => 9, "X" => 10, "IV" => 4, "V" => 5, "I" => 1);
36+
37+
foreach ($numerals as $numeral => $value) {
38+
// 通过str_replace 统计字符串的出现次数
39+
$roman = str_replace($numeral, "", $roman, $count);
40+
// 根据次数来计算
41+
$number += $count * $value;
42+
}
43+
44+
return $number;
45+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /