本文概述
尝试将数字转换为罗马表示时, 你需要考虑很多事情, 因此让我们考虑一下基础知识, 在大数字前面的小数字表示减法, 其他所有数字则意味着加法。例如, IV表示4, VI表示6。你不能在要减去的较大数字前面放置多个较小的数字。例如, IIV并不表示3, 因此你必须将一个, 数十个, 数百个和数千个作为单独的项目分开。这意味着99是XCIX, 即90 + 9, 但绝不应将其写为IC。同样, 999不能是IM, 而1999不能是MIM。可以很容易地理解在编程中遵循这种逻辑的方式(至少是从数字到罗马的方式), 但是从罗马数字到数值的方式更加困难, 因此在此不再赘述文章(不过我们将使用库进行处理)。
在本文中, 我们将向你展示如何将数字值转换为其罗马形式, 反之亦然(如果你使用的是库)。
A.使用一个函数
如果你无法使用库, 或者只是想保持简单, 则将以下函数添加到集合中。此函数将你的数字(第一个参数)转换为其罗马表示形式:
注意
大多数算法只能在1-4999的范围内工作, 因此使用较大的数字, 脚本将失败。
<?php
/**
* Converts a number to its roman presentation.
**/
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;
}
通过在你的项目中简单地包含此函数, 你将可以按以下方式使用它:
<?php
// VIII
echo numberToRoman(8);
// CXXIII
echo numberToRoman(123);
// MMCCCLV
echo numberToRoman(2355);
// MMMMCMXCIX
echo numberToRoman(4999);
而且我们不需要为此类函数包括一个库。
B.使用库
如果要使用库而不是编写自己的函数, 建议你使用Romans库, 这是一个非常简单的PHP Roman Numerals库, 可用于将整数转换为其罗马表示形式, 反之亦然。安装库的首选方法是使用composer, 因此你可以运行以下命令
composer require wandersonwhcr/romans
安装库之后, 你将能够使用其名称空间并使用可帮助你转换数字的函数。有关此库的更多信息, 请访问Github上的官方存储库。
该库包含几个简单的过滤器, 用于将具有罗马数字的字符串转换为将输入表示为十进制的int, 并将十进制int转换为具有罗马数字的字符串作为结果。
罗马数字
要将整数转换为罗马表示形式, 请使用IntToRoman类, 创建一个实例并从中调用filter方法。此方法将数字作为第一个参数, 并返回包含罗马数字的字符串:
use Romans\Filter\IntToRoman;
$filter = new IntToRoman();
$result = $filter->filter(1999);
// MCMXCIX
echo $result;
罗马数字
要将罗马数字转换为其数字表示形式, 请使用RomanToInt类, 创建一个实例并从中调用filter方法。此方法将带有罗马数字的字符串作为第一个参数, 并返回带有数字值的整数:
use Romans\Filter\RomanToInt;
$filter = new RomanToInt();
$result = $filter->filter('MCMXCIX');
// 1999
echo $result;
编码愉快!
评论前必须登录!
注册