sub multipliziere {
    my ( $faktoreins, $faktoreinsexp, $faktorzwei, $faktorzweiexp ) = @_;

    my ( $stellenfaktoreins, $stellenfaktorzwei, $stellengesamt, $ergebnis,
	$zeilen, $vorzeichenfaktoreins, $vorzeichenfaktorzwei,
	$stellenergebnis, $faktorzweispeicher );

## Haben die Zahlen ein negatives Vorzeichen?
    if ( $faktorzwei < 0 ) {
	$vorzeichenfaktorzwei = 1;
    }
    else {
	$vorzeichenfaktorzwei = 0;
    }
    if ( $faktoreins < 0 ) {
	$vorzeichenfaktoreins = 1;
    }
    else {
	$vorzeichenfaktoreins = 0;
    }

    $faktoreins         = abs($faktoreins);
    $faktorzweispeicher = $faktorzwei = abs($faktorzwei);

## Vor- oder Nachkommastellen?

    if ( $faktoreinsexp >= 0 ) {
	$stellenfaktoreins = vorkommastellen( $faktoreins * 10**$faktoreinsexp );
    }
    else {
	$stellenfaktoreins = vorkommastellen($faktoreins);
	if ( $stellenfaktoreins <= abs($faktoreinsexp) ) {
	    $stellenfaktoreins = abs($faktoreinsexp) + 1;
	}
    }
    if ( $faktorzweiexp >= 0 ) {
	$stellenfaktorzwei = vorkommastellen( $faktorzwei * 10**$faktorzweiexp );
    }
    else {

	$stellenfaktorzwei = vorkommastellen($faktorzwei);
	if ( $stellenfaktorzwei <= abs($faktorzweiexp) ) {
	    $stellenfaktorzwei = abs($faktorzweiexp) + 1;
	}
    }

    if ( $faktoreinsexp + $faktorzweiexp >= 0 ) {
	$stellenergebnis =
	    vorkommastellen( $faktorzwei * 10**$faktorzweiexp * $faktoreins * 10**$faktoreinsexp );
    }
    else {
	$stellenergebnis = vorkommastellen( $faktorzwei * $faktoreins );
    }

    $stellengesamt =
	$stellenfaktoreins + 1 + $stellenfaktorzwei + $vorzeichenfaktoreins + $vorzeichenfaktorzwei;

## Die erste Zeile wird geschrieben
## Was ist zu rechnen

    tabellenkopf($stellengesamt);

    if ( $vorzeichenfaktoreins == 1 ) {
	schreibezelle( "\$-\$", 1, 1 );
    }
    schreibezahlintabelle( $faktoreins, $faktoreinsexp, 1,
			   $stellenfaktoreins + $vorzeichenfaktoreins );
    schreibezelle( "\$\\cdot\$", 1, $stellenfaktoreins + 1 + $vorzeichenfaktoreins );
    if ( $vorzeichenfaktorzwei == 1 ) {
	schreibezelle( "\$-\$", 1,
		       $stellenfaktoreins + 1 + $vorzeichenfaktoreins + $vorzeichenfaktorzwei );
    }

    schreibezahlintabelle( $faktorzwei, $faktorzweiexp, 1,
			   $stellenfaktoreins + $vorzeichenfaktoreins + 1 + $stellenfaktorzwei +
			   $vorzeichenfaktorzwei );

    lesetabellenzeile( 1, $stellengesamt );
    ausgabe("\\hline");
    $zeilen = 1;

    my $wieoftmultipliziere = vorkommastellen($faktorzwei);

    my $i = 1;
    my $j = 0;
    for ( $i = 1 + $stellenfaktorzwei ; $i > 1 ; $i-- ) {

	if ( $faktoreinsexp >= 0 ) {
	    $ergebnis = $faktoreins * 10**$faktoreinsexp * ( $faktorzwei % 10 );
	}
	else {
	    $ergebnis = $faktoreins * ( $faktorzwei % 10 );
	}

	schreibezahlintabelle( $ergebnis, 0, $i, $stellengesamt - $j );
	$faktorzwei = ( $faktorzwei - ( $faktorzwei % 10 ) ) / 10;
	$j++;
	$zeilen++;
    }
    $faktorzwei = $faktorzweispeicher;

    for ( $i = 2 ; $i <= $stellenfaktorzwei + 1 ; $i++ ) {
	lesetabellenzeile( $i, $stellengesamt );
    }

    schreibezahlintabelle( $faktoreins * $faktorzwei, $faktoreinsexp +
	$faktorzweiexp, $zeilen + 3, $stellengesamt );

## Der Uebertrag wird bestimmt

    my $uebertrag = 0;
    my $teilsumme = 0;
    for ( $i = $stellengesamt ; $i > 0 ; $i-- ) {
	for ( $j = 2 ; $j <= $zeilen ; $j++ ) {
	    if ( $rechne[$j][$i] eq "" ) {
		$teilsumme = $teilsumme;
	    }
	    else {
		$teilsumme += $rechne[$j][$i];
	    }

	    $uebertrag = ( $teilsumme - ( $teilsumme % 10 ) ) / 10;

	    if ( $uebertrag == 0 ) {
		$rechne[ $zeilen + 1 ][ $i - 1 ] = "";
	    }
	    else {
		$rechne[ $zeilen + 1 ][ $i - 1 ] = "\\tiny{" . $uebertrag . "}";
	    }
	    $rechne[ $zeilen + 2 ][$i] = $teilsumme % 10;
	}
	$teilsumme = $uebertrag;
    }

## Das Rechenergebnis wird bestimmt
    lesetabellenzeile( $zeilen + 1, $stellengesamt );

    schreibezahlintabelle(
	$faktoreins * $faktorzwei,
	$faktoreinsexp + $faktorzweiexp,
	$zeilen + 3,
	$stellengesamt
	);
    ausgabe("\\hline \\hline");
    if ( ( $vorzeichenfaktoreins + $vorzeichenfaktorzwei ) == 1 ) {
	schreibezelle( "\$-\$", $zeilen + 3, $stellengesamt - ($stellenergebnis) );
    }
    lesetabellenzeile( $zeilen + 3, $stellengesamt );
    tabellenfuss();
}
