罗马字符与整数互转的关系_整数转罗马数字 java

罗马字符与整数互转的关系_整数转罗马数字 javaGivenaromannumeral,convertittoaninteger.Inputisguaranteedtobewithintherangefrom1to3999.思路罗马数字有如下符号:基本字符IVXLCDM对应阿拉伯数字1510501005001

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Given a roman numeral, convert it to an integer. Input is guaranteed
to be within the range from 1 to 3999.

思路

罗马数字有如下符号:

基本字符 I V X L C D M
对应阿拉伯数字 1 5 10 50 100 500 1000

1~9: {“I”, “II”, “III”, “IV”, “V”, “VI”, “VII”, “VIII”, “IX”};

10~90: {“X”, “XX”, “XXX”, “XL”, “L”, “LX”, “LXX”, “LXXX”, “XC”};

100~900: {“C”, “CC”, “CCC”, “CD”, “D”, “DC”, “DCC”, “DCCC”, “CM”};

1000~3000: {“M”, “MM”, “MMM”}.

计数规则:
相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3
小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8
小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4
正常使用时,连续的数字重复不得超过三次
在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则)

其次,罗马数字转阿拉伯数字规则(仅限于3999以内):

从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数.

代码如下:

/** * [romanToInt description] 罗马字符转换为整数 * @param [type] $str 罗马字符 * @return [type] 转化后的整数 */
function romanToInt($str) { 
   
    if (strlen($str) < 1) 
        return false;
    $res = charToNumber($str[0]);
    for ($i = 1; $i < strlen($str); $i++) {
        $pre = charToNumber($str[$i - 1]);
        $cur = charToNumber($str[$i]);
        if ($pre < $cur) {
            $res += $cur - 2 * $pre;
        } else {
            $res += $cur;
        }
    }
    return $res;
}

// 第二种方法
function romanToInt2($str) { 
   
    if (strlen($str) < 1) 
        return false;
    $res = 0;
    for ($i = 0; $i < strlen($str); $i++) {
        $val = charToNumber($str[$i]);
        if ($i == strlen($str) - 1 || charToNumber($str[$i + 1]) <= $val)
            $res += $val;
        else 
            $res -= $val;
    }
    return $res;
}

/** * [charToNumber description] 单个罗马字符转化为对应的数字 * @param [type] $char 单个罗马字符 * @return [type] 对应的整数 */
function charToNumber($char) { 
   
    switch ($char) {
        case 'I': return 1; break;  
        case 'V': return 5; break;
        case 'X': return 10; break;
        case 'L': return 50; break;
        case 'C': return 100; break;
        case 'D': return 500; break;
        case 'M': return 1000; break;
    }
    return 0;
}

echo romanToInt1('IX');
echo romanToInt2('IX');

整数转为罗马字符数字:

/** * 整数转换为罗马字符数字 * @param Integer $number 要转化的整数 * @return String 转化后的罗马字符数字 */
function intToRoman($number) { 
   
    $values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
    $romanChars = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"];
    $res = '';
    for($i = 0; $i < count($values); $i++) {
        while ($number >= $values[$i]) {
            $number -= $values[$i];
            $res .= $romanChars[$i];
        }
    }
    return $res;
}

// 方法二
function intToRoman2($number) { 
   
    $M = ["", "M", "MM", "MMM"];
    $C = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"];
    $X = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"];
    $I = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"];
    return $M[$number / 1000] . $C[floor($number % 1000 / 100)] . $X[floor($number % 100 / 10)] . $I[floor($number % 10)];
}
echo intToRoman(1001);
echo intToRoman2(1001);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187625.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IDEA2022.01.4 激活码【2022最新】

    (IDEA2022.01.4 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年4月1日
    160
  • 实用分享-在线公式编辑器(可导图识别)[通俗易懂]

    分享一款在线公式编辑器,之前写论文和技术文档常用,超级超级方便,通过截图方式截取公式,拉到这个编辑器里,latex语言就自动出现了,放在word公式编辑器里也可以,放在CSDN的公式编辑器里也可以,就不用手搓公式了。。。论文党的福利,特别是数学系物理系这种推公式推到头大的专业。

    2022年4月8日
    57
  • python画等边三角形_四边形的画法

    python画等边三角形_四边形的画法python是编程语言,学习它只是因为要搞深度学习,其实语言类只要精通一种即可,但一定是精通,像我就是啥都知道,啥都不精,到最终一事无成。在学Python的时候,无意间看到网上有小游戏开发,于是乎就想自己调试下。第一个接触的例程是画国旗的。画国旗必然要画框,画框也就是画四边形,要画五角星,而五角星就是也是由三角形组成的,因此画一面很完美的五星红旗,则基础需要画四边形和三角形。OK,让我们一起来玩

    2022年9月19日
    0
  • webstorm激活码【中文破解版】

    (webstorm激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSW…

    2022年3月21日
    38
  • nested exception is java.lang.StackOverflowError解析

    背景介绍:项目是微服务的,使用docker容器,使用jenkins部署。测试环境有个公共服务一直以来都能正常发布,突然有一天不行了,经常发布失败,然后多发布几次就好了。报错如下:是栈溢出了,一般

    2022年2月16日
    72
  • 游戏数据实时监控和分析[通俗易懂]

    游戏数据实时监控和分析[通俗易懂]概述为了更好的了解到游戏运行时的状态,对相关的功能和数据进行分析是很重要的,设计了本系统。现有的游戏数据大部分采用的是文本输出,备份,然后离线数据分析的方式,不能实时的监控的游戏的状态.相关技术:1:产生日志服务器采用c++实现2:日志监控服务器采用Java实现3:采用hadloop分布式架构.为应付大规模数据和实时的要求,尽快对数据进行分析4:存储日志采用mo

    2022年5月12日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号