罗马字符与整数互转的关系_整数转罗马数字 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);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 网络:下载进度条

    网络:下载进度条#import”ViewController.h”#import”ProgressButton.h”@interfaceViewController()@property(nonatomic,assign)longlongfileSize;//文件总大小@property(nonatomic,assign)

  • 移动端HTML5开发心得「建议收藏」

    移动端HTML5开发心得「建议收藏」1,iOS里固定中有输入或者textarea,用户在里面输入文字,触发键盘,固定容器会客显示,而不是是连续悬浮   解决办法:http: //dwz.cn/CrwNz2,移动端点击时间300ms的延迟   解决办法:zepto.js或者百度touch.js或者是fastclick.js3,zepto的触摸问题:swipe事件在小米1等低端手机不支持基本不用zepto…

  • MySQL error 1396_Last

    MySQL error 1396_LastMySQL主备数据库切换报错1396处理方法,操作步骤如下:mysql>showslavestatus\G;***************************1.row***************************Slave_IO_State:WaitingformastertosendeventMaster_Host:196.55.3.180Mas…

  • linux怎么查看系统环境变量路径,Linux系统中的环境变量该如何设置与查看

    linux怎么查看系统环境变量路径,Linux系统中的环境变量该如何设置与查看今天小编要跟大家分享的文章是关于Linux系统中的环境变量该如何设置与查看。大家都知道,在Linux系统中,有环境变量和Shell变量这两种变量。环境变量是在程序及其子程序中全局可用的,常常用来储存像默认的文本编辑器或者浏览器,以及可执行文件的路径等等这样的信息。而Shell变量仅在当前Shell中可用,可以用来存储当前用户的ID等信息。那么什么是环境变量,什么是Shell变量…

  • Java工程师定位「建议收藏」

    Java工程师定位「建议收藏」Java工程师定位

  • pycharm激活码2021_最新在线免费激活

    (pycharm激活码2021)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlS3…

发表回复

您的电子邮箱地址不会被公开。

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