Christian Kruse: Logisch grübeln: Information Codieren

Beitrag lesen

你好 Monty,

Aufgabe ist es im Zahlenbereich von 1 bis 1200 bis zu 600 Zahlen in einem
Code bestehend aus Buchstaben(A-Z) und Zahlen (0-9) zu Speichern, und
wieder rückrechnen zu können.

Du möchtest also Dezimal-Ziffern ins 36er-System und wieder zurückwandeln
können. Dann mach das doch. Beispiel-Code für eine Von-Hand-Lösung in Perl:

  
sub to_dec36 {  
  my $num   = shift;  
  my @chars  = (0..9,'A'..'Z');  
  my $a      = 1;  
  my $result = '';  
  
  $a *= 36 while $num >= $a;  
  
  while($a != 1) {  
    $a    /= 36;  
  
    $b     = $num / $a;  
    $num %= $a;  
  
    $result .= $chars[$b];  
  }  
  
  return $result;  
}  
  
sub from_dec36 {  
  my $num    = shift;  
  my @nums   = split // => $num;  
  my @chars  = (0..9,'A'..'Z');  
  
  my $i3     = length($num) - 1;  
  my $i2;  
  my $base;  
  my $result = 0;  
  
  for(my $i=0;$i<length($num);$i++) {  
    $base = 36 ** ($i3 - $i);  
  
    for($i2=0;$i2<@chars;$i2++) {  
      last if $chars[$i2] eq $nums[$i];  
    }  
  
    $base = $base * $i2;  
    $result = $result + $base;  
  }  
  
  return $result;  
}  
  
my $num   = 20;  
my $num36 = to_dec36($num);  
my $num10 = from_dec36($num36);  
  
print "num: $num, num36: $num36, num10: $num10\n";  

Ich habe absichtlich auf Perl-Rafinessen verzichtet, damit du es 1:1 in
PHP, C oder sonsteine Sprache übertragen kannst.

再见,
 克里斯蒂安

--
Auf der ganzen Welt gibt es nichts Weicheres und Schwaecheres als Wasser. Doch in der Art, wie es dem Harten zusetzt, kommt nichts ihm gleich.
http://wwwtech.de/