#!/usr/bin/perl ############################################### # # # This is just a simple cgi programme in perl # # for showing large numbers written out. # # # # programmed by: # # Wolfgang Hartmut Nitsche # # http://nitsche.mobi # # http://www.stanford.edu/~nitsche/ # # # ############################################### $query = $ENV{'QUERY_STRING'}; $filename = $ENV{'SCRIPT_FILENAME'}; $url = $ENV{'SCRIPT_URI'}; if($query eq 'source'){$what='source';} elsif($query eq 'style'){$what='style';} elsif($query eq 'hundred'){$what='hundred';} elsif($query eq '1891plex'){$what='1891plex';} elsif($query eq 'megaplex'){$what='megaplex';} elsif($query eq 'googol'){$what='googol';} elsif($query eq 'googolplex'){$what='googolplex';} else{$what='mainpage';} if($what eq 'source') { print "Content-type: text/plain\n\n"; open(FILE, "<$filename"); while() { print $_; } close(FILE); } if($what eq 'style') { print "Content-type: text/css\n\n"; print "\n"; print 'body { background-color:#d6ddd3; color:#000000; }'; print "\n"; print 'a { text-decoration:underline; color:#0000ff; }'; print "\n"; print 'a:visited { color:#660099; }'; print "\n"; print 'a:hover { background:#ffff00; }'; print "\n"; print 'a:active {color:#ff0000; background:#ffffcc; }'; print "\n"; print ''; } if($what eq 'mainpage') { $title = "Googolplex and other large numbers written out (Start Page)"; &htmlstart; print "\n"; print '

Please choose which number you want to see written out

'; print "\n"; print ''; print "\n"; &htmlend; } if($what eq 'hundred') { $numbername = "Hundred"; $shownumber=1; $exponentmultiplier=2; $exponentzeros=0; } if($what eq 'googol') { $numbername = "Googol"; $shownumber=1; $exponentmultiplier=1; $exponentzeros=2; } if($what eq '1891plex') { $numbername = "1891plex"; $shownumber=1; $exponentmultiplier=1891; $exponentzeros=0; } if($what eq 'megaplex') { $numbername = "Megaplex"; $shownumber=1; $exponentmultiplier=1; $exponentzeros=6; } if($what eq 'googolplex') { $numbername = "Googolplex"; $shownumber=1; $exponentmultiplier=1; $exponentzeros=100; } if($shownumber==1) { $title = "$numbername written out"; &htmlstart; print "\n"; print '
'; print "\n"; print '

Back to start page for large numbers written out

'; print "\n"; print '
'; print "\n"; print "\n"; print '1 '; print $numbername; print ' =
'; print "\n"; print '= 10^('; print $exponentmultiplier; print '*(10^'; print $exponentzeros; print ')) =
'; print "\n"; $remainingexponentzeros = $exponentzeros; $exponent = $exponentmultiplier; while($remainingexponentzeros>0) { $exponent=$exponent.'0'; $remainingexponentzeros--; } print "\n"; print '= 10^'; print $exponent; print ' =
'; print "\n"; print '= 1'; $zerosshown = 0; $firstzeros = (substr $exponent, -1, 1); while($zerosshown<$firstzeros) { print '0'; $zerosshown++; } print " \n"; # (Now I know that the remaining number of zeros which # we still have to display is a multiple of 10.) while($zerosshown ne $exponent) { print " 0000000000 "; &increasezerosshownbyten; print ''; print "\n"; } print "\n"; print '
'; print "\n"; print '

Back to start page for large numbers written out

'; print "\n"; &htmlend; } sub htmlstart { print "Content-type: text/html\n\n"; print "\n"; print ''; print "\n"; print ''; print "\n"; print ''; print "\n"; print ''; print $title; print ''; print "\n"; print ''; print "\n"; print ''; print "\n"; print ''; print "\n"; print ''; print "\n"; print ''; print "\n"; print '

'; print $title; print '

'; print "\n"; print ''; } sub htmlend { print "\n"; print '

You can download the source of the Perl-script '; print "\n"; print 'which generates this and the other HTML pages '; print "\n"; print 'about large numbers written out.

'; print "\n"; print '

This script has been written by Wolfgang H Nitsche '; print "\n"; print '<http://nitsche.mobi> '; print "\n"; print '<http://www.stanford.edu/~nitsche/>.'; print "\n"; print '

'; print "\n"; print ''; print "\n"; print ''; print "\n"; print ''; } sub increasezerosshownbyten { # essentially, I want to implement # something like $zerosshown+=10 which works # for numbers with 100 digits $zerosshown = '0'.$zerosshown; @digits = split(//, $zerosshown); $digits[-2]+=1; for($i=$#digits; $i>=0; $i--) { if(10==$digits[$i]) { $digits[$i] = 0; $digits[$i-1]++; } } if(0==$digits[0]) { shift(@digits); } $zerosshown = join('', @digits); } ####### # # # END # # # #######