Problem 40: Champernowne-Zahl

Gesucht wird das Produkt der 1., 10., 100., 1000., 10000., 100000. und 1000000. Stelle der Champernowne-Zahl! [ das englische Original ]

Da die gesuchten Stellen der Zahl sehr groß werden, macht es wenig Sinn, alle vorhergehenden Stellen zu speichern. Es reicht also, wenn man sich merkt, wie viele Stellen bereits erreicht wurden. Hier kann ich die Klasse für große Zahlen wiederverwendeten und so leicht eine gesuchte Stelle auslesen. Damit ergibt sich folgende triviale Lösung:

@Override
public String solve() {
   int digit = 10;
   int length = 1;
   int result = 1;
   LargeNumber num = new LargeNumber( 1 );
   LargeNumber one = new LargeNumber( 1 );
 
   while( digit < 10000000 ) {
      num = num.add( one );
      if( length + num.getLength() > digit ) {
         int n = num.getDigit( num.getLength() - ( digit - length ) );
         IO.infoln( "found new part in number " + num + " -> " + n );
         result *= n;
         digit *= 10;
      }
      length += num.getLength();
   }
 
   return IO.i2s( result );
}

Den vollständigen Quellcode der Klasse für die Lösung des Problems 40 kann man sich hier anschauen!

<< Problem 39 Übersicht Problem 41 >>

Willkommen in Nico Dannebergs Netzwerk

%d Bloggern gefällt das: