方法一:自定义函数
我们可以自己手动编写一个函数来实现此功能,这个函数可以将数字作为第一个参数,将其转换为罗马并返回。
注:大多数算法只能在1-4999的范围内工作,如果使用特大数,脚本将失败。
实现代码:
<?php header("content-type:text/html;charset=utf-8"); //将数字转换为罗马表示形式 function numberToRoman($num) { // Be sure to convert the given parameter into an integer $n = intval($num); $result = ''; // Declare a lookup array that we will use to traverse the number: $lookup = array( '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 ); foreach ($lookup as $roman => $value) { // Look for number of matches $matches = intval($n / $value); // Concatenate characters $result .= str_repeat($roman, $matches); // Substract that from the number $n = $n % $value; } return $result; } echo '整数数字转换为罗马数字:<br><br>'; // VIII echo '数字8:'.numberToRoman(8).'<br>'; // CXXIII echo '数字123:'.numberToRoman(123).'<br>'; // MMCCCLV echo '数字2355:'.numberToRoman(2355).'<br>'; // MMMMCMXCIX echo '数字4999:'.numberToRoman(4999).'<br>'; ?>
输出:
方法二:使用Romans库
Romans库是一个非常简单的PHP罗马数字库,允许您将整数转换为其罗马表示,反之亦然。
注:如果没有该库,请先需要安装;安装好Romans库后,就能够使用其命名空间并使用可帮助转换数字的函数。
Romans库包含一对简单的过滤器,用于将具有罗马数字的字符串转换为表示输入为十进制的int,将十进制int转换为具有罗马数字作为结果的字符串。
1、整数转换为罗马数字
要将整数转换为罗马表示,需要使用IntToRoman类,创建一个实例并从中调用filter方法。此方法将数字作为第一个参数,并返回带有罗马数字的字符串:
<?php use Romans\Filter\IntToRoman; $filter = new IntToRoman(); $result = $filter->filter(1999); echo $result; ?>
输出:
MCMXCIX
2、罗马数字转换为整数
要将罗马数字转换为整数表示,需要使用RomanToInt类,创建一个实例并从中调用filter方法。此方法将使用罗马数字的字符串作为第一个参数,并返回一个带数值的整数:
<?php use Romans\Filter\RomanToInt; $filter = new RomanToInt(); $result = $filter->filter('MCMXCIX'); echo $result; ?>
输出:
1999
问题内容: 我需要使用一种方法将整数转换为罗马数字。后来,我必须使用该程序以罗马数字写出1到3999,这样就可以进行硬编码了。我下面的代码非常简单;它是一个基本的I / O循环,可以在使用getIntegerFromUser我们在课堂上制作的程序包时退出。 当我调用该方法时,是否可以将值赋给字符串,然后将它们添加在一起? 更新:我从教授那里得到了一些伪代码来帮助我,而在我理解他要说的内容的同时,我
问题内容: 这是user2486所说的之后的当前代码。 我在使用ns时遇到此错误:UnboundLocalError:分配前引用了本地变量’ns’ 问题答案: 考虑一下此附加的伪代码和提示(其中一些是有效的Python,一些不是有效的,但有注释)。
我正在尝试将罗马数字转换为阿拉伯数字。我取一个字符串并运行一个循环来检查每个字符的值。所以'M'将返回1000等。在罗马数字中,如果一个数字小于下一个,那么您需要减去它。所以'XL'或'10 50'将是40。这就是为什么我在for循环中有一个if语句,我在其中检查下一个字符并返回其值。稍后我将进行算术运算,但现在我只是尝试返回值。 我的问题是,它总是返回最后一个字符值两次。不管我输入2个字符还是1
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100
罗马数字包含以下七种字符:I,V,X,L,C,D和M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,
问题内容: 我有一个接收a的函数,但是我所拥有的a是进行此转换的最佳方法是什么? 我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。 问题答案: 我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该库。OP建议可能会有一些开销。纵观源的实施,我看到它做了一些运行时的决策最大的灵活性。 对?Write()接受一个非
013. Roman to Integer 问题 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. Subscribe to see which companies asked this question 思路 首先要知道罗马数字的规