2 strings bestehend aus zahlen multiplizieren und im neuen string ablegen



  • ich hab hier eine aufgabe
    und zwar soll ich 2 strings, welche aus zahlen bestehen miteinander multiplizieren und in einem neuen array speichern.

    Zwei sehr lange ganze, positive Zahlen ( a und b ) sind miteinander zu multiplizieren
    und das Ergebnis ( c ) ist auszugeben. Die Zahlen a,b und c sind jeweils als String
    gespeichert:
    char a[512]="123456789012345678901234567890123456789";
    char b[512]="98765432109876543210987654321098765432109876";
    Geben Sie eine Funktion an, welche das Ergebnis im Feld char c[…] ablegt.
    Beachten Sie, dass der Ausdruck a[0]-'0' die erste Ziffer der Zahl a als Integer
    beinhaltet!

    der untere teil ist schon gegeben...
    wäre froh über eine hilfe

    #include <stdio.h>
    void mult(char a[], char b[], char c[]) {
    int main (void) {
    char a[512]="99999999999999999999999999";
    char b[512]="11111111111111111111111111";
    char c[1025];
    mult(a,b,c);
    printf("%s * %s = %s\n",a,b,c);
    }
    


  • Überlege dir, wie du 2 Zahlen miteinander auf dem Papier multiplizierst 😉



  • das heißt stelle für stelle multiplizieren..aber wie erreiche ich das denn? :S und dann auch noch in ein neues array?



  • Wie du aus einem char die Zahl bekommst, weißt du ja. Ziffern Multiplizieren und den Übertrag nicht vergessen 🙂



  • mit der funktion atoi oder? kann das sein?

    also
    char a[512]="99999999999999999999999999";
    char b[512]="11111111111111111111111111";

    zahl 1 = atoi(a);
    zahl 2 = atoi(b);

    so? dann kann ich die doch auch einfach miteinander multiplizieren?



  • Ganz so einfach ist es dann doch nicht 😉
    "Beachten Sie, dass der Ausdruck a[0]-'0' die erste Ziffer der Zahl a als Integer
    beinhaltet!" -> Bedeutet: Du holst dir aus dem String der Reihe nach die einzelnen Zeichen, durch Abziehen von '0' bekommst du dann deinen int-Wert, mit dem du rechnen kannst.



  • atoi macht das zwar, aber ich glaube, dass der Sinn ist dies selber zu programmieren.



  • ich hab leider keine ahnung wie ich die zahlen einzeln da raushole :S



  • und wenn ich diesen integer am anfang einfach überspringe?
    wenn ich sag fang an ab a[1] umzuwandeln..würde das nich gehenb?



  • Im Forum finden sich sicher unzähliche Threads zu dem Thema atoi/myatoi.



  • mit atoi funktioniert das nicht unbedingt. Was, wenn die Zahlen zu groß sind, um in normalen integern gespeichert zu werden?

    Und warum soltest du den Intger am Anfang überspringen? Dann fehlt dir ein integer.

    So holt man sich eine Ziffer aus dem String:

    int ersteziffer = str[0]-'0';
    

    Buchstaben sind auch nur Zahlen 😉 Schau mal in die ASCII-Tabelle und überlege, warum da der Buchstabe '0' abgezogen wird.

    Noch ein Tip: Ich würde die Strings vom Stringende beginnend multiplizieren. So, wie man das auch auf einem Papier macht. Den Übertrag speicherst du dann in einer extra variablen für den nächsten Rechenschritt.



  • ich brauch das speziell für meine aufgabe :S jeder hat doch seine eigenen probleme..hab auch schon gegooglet und alles..ich komm einfach nich weiter so..



  • Die Sache ist nichttrivial.
    Es gibt Bibliotheken, die sich der Sache annehmen, z.B.

    http://spinning-yarns.org/michael/mpi/

    atoi und Konsorten führen nicht zum Ziel, versuche deine händische Multiplikation nachzubilden, indem du die Zwischenergebnisse aufsummierst (wozu du auch eine String-taugliche Addition benötigst), nachdem du das obere rechte Dreieck mit Nullen aufgefüllt hast.



  • Multipliziere doch mal schriftlich, Stelle für Stelle.

    12 * 34 = 
    ----------------
      2*4=    8
     1 *4=   4
    
      2*3=   6
     1 *3=  3
          ------
    Summe = 408
    

    Tipp 1: Schreib erstmal eine Additionsfunktion.
    Tipp 2: Drehe die Zahlen um also statt "123456" -> "654321", Damit die Einerstelle an den Anfang kommt.


Log in to reply