【问题标题】:Roman Numeral to integer function罗马数字转整数函数
【发布时间】:2015-07-24 21:19:15
【问题描述】:

基本上我正在尝试创建一个将罗马数字转换为整数的函数。

我有一个数组:

$roman_numerals=[
    'M'  => 1000,
    'CM' => 900,
    'D'  => 500,
    'CD' => 400,
    'C'  => 100,
    'XC' => 90,
    'L'  => 50,
    'XL' => 40,
    'X'  => 10,
    'IX' => 9,
    'V'  => 5,
    'IV' => 4,
    'I'  => 1
];

我对 PHP 还很陌生,所以我还在习惯这种思维方式,所以请记住我还在学习 :)

这是我的功能 - 或者我目前拥有的功能:

//Array
function romanToInteger($key)
{
$roman_numerals=[
    'M'  => 1000,
    'CM' => 900,
    'D'  => 500,
    'CD' => 400,
    'C'  => 100,
    'XC' => 90,
    'L'  => 50,
    'XL' => 40,
    'X'  => 10,
    'IX' => 9,
    'V'  => 5,
    'IV' => 4,
    'I'  => 1
];

$roman = intval($key);
$result = 0;

foreach ($roman_numerals as $key => $value) {
    while (strpos($roman, $key) === 0) {
        $result += $value;
        $roman = substr($roman, strlen($key));
    }
}
var_dump($roman); //test
echo $result;
}

我已经在这里工作了好几个小时,希望能看到它的光芒,任何建议都将不胜感激。

当我在命令行中运行它时

echo romanToInteger('I');

我刚返回 0,我认为这与我的 intval 有关?

再次抱歉成为菜鸟,但感谢您的帮助或任何指示! :)

【问题讨论】:

    标签: php function foreach integer roman-numerals


    【解决方案1】:

    是的,它与intval 有关。

    您基本上是将罗马输入转换为整数,将其呈现为0

    删除:

    function romanToInteger($key)
    {
        $romans = [
            'M' => 1000,
            'CM' => 900,
            'D' => 500,
            'CD' => 400,
            'C' => 100,
            'XC' => 90,
            'L' => 50,
            'XL' => 40,
            'X' => 10,
            'IX' => 9,
            'V' => 5,
            'IV' => 4,
            'I' => 1,
        ];
    
        $roman = $key;
        $result = 0;
    
        foreach ($romans as $key => $value) {
            while (strpos($roman, $key) === 0) {
                $result += $value;
                $roman = substr($roman, strlen($key));
            }
        }
        echo $result;
    }
    
    romanToInteger('IV');
    

    Sample Output

    【讨论】:

    • 谢谢!不太清楚为什么我现在想把它放在那里......再次感谢我现在明白了:)
    • @CalvinTaylor 很高兴这有帮助
    • @Ghost romanToInteger('IV'); 在您更新的键盘粘贴中输出 10。那应该是 4。在罗马方法中,如果第一个值小于下一个值,则从 V 中减去 I。与VI 不同的是6。
    • @Fred-ii- 是的,这个逻辑太痛苦了,只需使用密钥
    • @Ghost 我觉得这太复杂了,无法以正确的顺序完成正确的序列。 VV 基本上是 X 但这可能会被误解。 XIIX 也一样,我想你知道我的意思 ;-) 可能是为什么系统没有经受住时间的考验。罗马人没有预见到数字时代。
    猜你喜欢
    • 2023-01-17
    • 2019-01-09
    • 2011-10-25
    • 2022-07-08
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多