aber ich muss ein lesendes MYSQL umwandeln und dieser Code funktioniert nicht: echo romanic_number(. $row['id'].); Es tut mir leid, das PHP funktioniert noch nicht gut.
– LukasMakey
23. Februar 2013 um 17:25 Uhr
Nein, das Problem ist nicht die Funktion. Ich schlage vor, Sie lernen, wie man mit Variablen in Funktionen und Arrays umgeht, Sie müssen sagen …”.echo romanic_number($row_id).”…
– Benutzer2095686
23. Februar 2013 um 18:49 Uhr
Ich habe das End-Tag für PHP hinzugefügt und die $upcase-Unterstützung implementiert
– Joran
16. August 2014 um 13:38 Uhr
wurde user2095686 gelöscht oder warum erscheint er ausgegraut?
– Georg Tiganila
30. November 2020 um 19:07 Uhr
Eine andere Möglichkeit, dies zu tun
<?php
function ConverToRoman($num){
$n = intval($num);
$res="";
//array of roman numbers
$romanNumber_Array = 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 ($romanNumber_Array as $roman => $number){
//divide to get matches
$matches = intval($n / $number);
//assign the roman char * $matches
$res .= str_repeat($roman, $matches);
//substract from the number
$n = $n % $number;
}
// return the result
return $res;
}
echo ConverToRoman(23);
?>
function rome($N){
$c="IVXLCDM";
for($a=5,$b=$s="";$N;$b++,$a^=7)
for($o=$N%$a,$N=$N/$a^0;$o--;$s=$c[$o>2?$b+$N-($N&=-2)+$o=1:$b].$s);
return $s;
}
// from polish wiki
Das scheint zu funktionieren, warnt aber: Illegal offset at ''. Ich habe gesetzt @$c[... and it seems to be perfect.
– Vojtěch
Mar 6, 2015 at 14:51
@Vojtěch that turns off error reporting, of course it’ll look perfect.
– user3714134
Jan 20, 2016 at 9:10
Works with 1, 2, 3 and then crashes on ‘A non-numeric value encountered’ for $N = 4, tested with PHP 7.3.
– Francis Pierot
Aug 17, 2020 at 9:19
This attempt at codegolf is missing its educational explanation and the snippet itself is not easy to read with the obvious deficit of spaces.
– mickmackusa
Jul 24, 2021 at 21:26
Reto
There is an illegal offset issue.
Replace
$o=1:$b].$s);
mit
$o=1:$b >0 ? $b : 0].$s);
GEPRÜFT UND VERIFIZIERT DURCH PHP UNIT
Erstellen Sie eine Klasse mit Namen Römische Ziffern und fügen Sie eine geschützte statische Eigenschaft wie definiert hinzu:
public function output ($number)
{
$solution = '';
foreach(static::$lookup as $limit => $glyph){
while ($number >= $limit) {
$solution .= $glyph;
$number -= $limit;
}
}
return $solution;
}
Ich habe die gleiche, schnellste Methode von allen zu diesem Thema übernommen. Zeitgesteuert mit Schleifen von 1 bis 20000 ist die str_repeat-Methode viel langsamer, und die andere ‘while’-Methode ist etwas langsamer, da $map den Neustart und die lokale Zuweisung umfasst. Ich konnte den Oneliner von Jasiek oben nicht timen, da er nicht mit PHP 7.3 funktioniert und dies ein Code ist, den ich nicht lesen/debuggen werde/kann.
– Franz Pierot
17. August 2020 um 9:42 Uhr
Ich verbessere die rome()-Funktion von Jasiek
function rome2($N)
{
// support for numbers greater than a thousand
$ss="";
while ($N > 1000) {
$ss .= 'M';
$N -= 1000;
}
$c="IVXLCDM";
for ($a = 5, $b = 0, $s=""; $N; $b++, $a ^= 7)
for ($o = $N % $a, $N = $N / $a ^ 0; $o--; ) {
$s = $c[$o > 2 ? $b + $N - ($N &= -2) + $o = 1 : $b] . $s;
}
return $ss.$s;
}
Ich habe die gleiche, schnellste Methode von allen zu diesem Thema übernommen. Zeitgesteuert mit Schleifen von 1 bis 20000 ist die str_repeat-Methode viel langsamer, und die andere ‘while’-Methode ist etwas langsamer, da $map den Neustart und die lokale Zuweisung umfasst. Ich konnte den Oneliner von Jasiek oben nicht timen, da er nicht mit PHP 7.3 funktioniert und dies ein Code ist, den ich nicht lesen/debuggen werde/kann.
– Franz Pierot
17. August 2020 um 9:42 Uhr
Meine eigene Funktion hat die beste Leistung:
function romanNumber($n)
{
// support for numbers greater than a thousand
$ret1 = '';
while ($n >= 1000) {
$ret1 .= 'M';
$n -= 1000;
}
$ret="";
if ($n > 0) {
$n = (string) $n;
$l="IVXLCDM";
$j = 0; // goes by roman letters
for ($i = strlen($n)-1; $i >= 0; --$i) { // goes by decimal number
switch ($n[$i]) {
case 0: $s=""; break;
case 1: $s = $l[$j]; break;
case 2: $s = $l[$j].$l[$j]; break;
case 3: $s = $l[$j].$l[$j].$l[$j]; break;
case 4: $s = $l[$j].$l[$j+1]; break;
case 5: $s = $l[$j+1]; break;
case 6: $s = $l[$j+1].$l[$j]; break;
case 7: $s = $l[$j+1].$l[$j].$l[$j]; break;
case 8: $s = $l[$j+1].$l[$j].$l[$j].$l[$j]; break;
case 9: $s = $l[$j].$l[$j+2]; break;
}
$j += 2;
$ret = $s.$ret;
}
}
return $ret1.$ret;
}
11806400cookie-checkZahlen in römische Zahlen mit phpyes
Mögliches Duplikat: stackoverflow.com/questions/267351/…
– Matt
21. Februar 2013 um 5:10 Uhr
Oh, Ihr Titel ist rückwärts. Bitte schön: stackoverflow.com/questions/6265596/…
– Matt
21. Februar 2013 um 5:23 Uhr
Zahl zu Roman in PHP
– Antonius
21. Februar 2013 um 5:26 Uhr
mkaatman diese Seite ist die Umkehrung meines Problems!
– LukasMakey
21. Februar 2013 um 17:34 Uhr