Перевод чисел из арабских в римские на php. Где ошибка?
Только начинаю изучать php. Нужно написать программу перевода арабских чисел в римские через условия и/или цикл. На выходе все равно возвращает арабскую, еще и ноль впереди ставит. На сайте видела решение через массив, но мне нужно именно массив не использовать. Заранее спасибо.
<?php
$number = 58;
if ($number >= 4000 ) {
echo "Ваше число слишком длинное. Римляне не использовали такие числа";
} else {
if ($number < 0) {
$number = -$number;
}
$x = floor($number / 1000);
$a = floor($number / 100);
$b = floor($number / 10) % 10;
$c = $number % 10;
switch ($c) {
case 0:
$c == "";
break;
case 1:
$c == "I";
break;
case 2:
$c == "II";
break;
case 3:
$c == "III";
break;
case 4:
$c == "IV";
break;
case 5:
$c == "V";
break;
case 6:
$c == "VI";
break;
case 7:
$c == "VII";
break;
case 8:
$c == "VIII";
break;
case 9:
$c == "XI";
break;
}
if (!$b) {
$b = "";
} else {
switch ($b) {
case 0:
$b == "";
break;
case 1:
$b == "X";
break;
case 2:
$b == "XX";
break;
case 3:
$b == "XXX";
break;
case 4:
$b == "XL";
break;
case 5:
$b == "L";
break;
case 6:
$b == "LX";
break;
case 7:
$b == "LXX";
break;
case 8:
$b == "LXXX";
break;
case 9:
$b == "XC";
break;
}
if (!$a) {
$a = "";
} else {
switch ($a) {
case 0:
$a == "";
break;
case 1:
$a == "C";
break;
case 2:
$a == "CC";
break;
case 3:
$a == "CCC";
break;
case 4:
$a == "CD";
break;
case 5:
$a == "D";
break;
case 6:
$a == "DC";
break;
case 7:
$a == "DCC";
break;
case 8:
$a == "DCCC";
break;
case 9:
$a == "CM";
break;
}
if (!$x) {
$x = "";
} else {
switch ($x) {
case 0:
$x == "";
break;
case 1:
$x == "M";
break;
case 2:
$x == "MM";
break;
case 3:
$x == "MMM";
break;
}
}
}
}
echo $x . $a . $b . $c;
}
?>
Ответы (1 шт):
Автор решения: Максим Степанов
→ Ссылка
У вас везде оператор сравнения ==, а надо оператор присваивания =
Также условные операторы вложены друг в друга и до проверки x, к примеру, в данном случае скрипт не доходит. Если расположить условные операторы друг под другом, получится нужный результат, по идее.
<?php
$number = 58;
if ($number >= 4000 ) {
echo "Ваше число слишком длинное. Римляне не использовали такие числа";
} else {
if ($number < 0) {
$number = -$number;
}
$x = floor($number / 1000);
$a = floor($number / 100);
$b = floor($number / 10) % 10;
$c = $number % 10;
switch ($c) {
case 0:
$c = "";
break;
case 1:
$c = "I";
break;
case 2:
$c = "II";
break;
case 3:
$c = "III";
break;
case 4:
$c = "IV";
break;
case 5:
$c = "V";
break;
case 6:
$c = "VI";
break;
case 7:
$c = "VII";
break;
case 8:
$c = "VIII";
break;
case 9:
$c = "XI";
break;
}
if (!$b) {
$b = "";
} else {
switch ($b) {
case 0:
$b = "";
break;
case 1:
$b = "X";
break;
case 2:
$b = "XX";
break;
case 3:
$b = "XXX";
break;
case 4:
$b = "XL";
break;
case 5:
$b = "L";
break;
case 6:
$b = "LX";
break;
case 7:
$b = "LXX";
break;
case 8:
$b = "LXXX";
break;
case 9:
$b = "XC";
break;
}
}
if (!$a) {
$a = "";
} else {
switch ($a) {
case 0:
$a = "";
break;
case 1:
$a = "C";
break;
case 2:
$a = "CC";
break;
case 3:
$a = "CCC";
break;
case 4:
$a = "CD";
break;
case 5:
$a = "D";
break;
case 6:
$a = "DC";
break;
case 7:
$a = "DCC";
break;
case 8:
$a = "DCCC";
break;
case 9:
$a = "CM";
break;
}
}
if (!$x) {
$x = "";
} else {
switch ($x) {
case 0:
$x = "h";
break;
case 1:
$x = "M";
break;
case 2:
$x = "MM";
break;
case 3:
$x = "MMM";
break;
}
}
}
echo $x . $a . $b . $c;
?>