Potenzen berechnen von grossen Zahlen.



  • Hallo Leute.
    kann mir eventuell von euch jemand helfen.
    Ich muss für die Schule folgendes Programm schreiben:

    Nach einer alten Legende wünschte sich der Ernder des Schachspiels
    vom König:
    • 1 Reiskorn auf dem ersten Feld eines Schachbrettes
    • 2 Reiskörner auf dem 2. Feld
    • 4 Reiskörner auf dem 3. Feld
    • u.s.w.
    Geben Sie die Anzahl der Reiskörner mit wachsender Anzahl von Feldern aus.
    Berechnen Sie zusätzlich, wie viele LKWs (je 7,5 Tonnen Ladung) man für den
    Transport benötigt, wenn jedes Reiskorn 30 mg wiegt. Wenn weiterhin ein Reiskorn
    ein Volumen von etwa 3:5 · 10􀀀8m3 hat, wie hoch wird dann ein Fuÿballfeld
    (70 auf 105 m) bedeckt?
    Ausgabe mit printf

    Habe überlegt und das dies kann man ja ganz einfach mit einem potenzrechner ausgeben.

    Hier mein Programm:

    #include <iostream>
    #include <math.h>

    using namespace std;

    int main(void)
    {
    long double hochzahl = 1, basis = 2, ergebnis = 0;
    ergebnis = std::pow(2, 64);
    cout << ergebnis << endl;

    cin.get();
    return 0;
    }

    Allerdings erhalte ich als Ausgabe: 1.84467e+19
    Die Ausgabe will ich allerdings als ganze lange Zahl haben?

    Weiss jemand was ich falsch mache ?



  • Die richtige Zahl passt in einen uint64_t.





  • Besten Dank für die schnellen Antworten.
    Habe es soeben anders lösen können.


  • Mod

    Falls du es mit double gelöst hast, ist das Ergebnis falsch. Es muss 18446744073709551615 heraus kommen.



  • volkard schrieb:

    Die richtige Zahl passt in einen uint64_t.

    Die richtige Zahl ist die erste die nicht mehr in einen uint64_t passt.



  • hustbaer schrieb:

    volkard schrieb:

    Die richtige Zahl passt in einen uint64_t.

    Die richtige Zahl ist die erste die nicht mehr in einen uint64_t passt.

    Unfug. Lies nochmal die Aufgabe.



  • Achje, ich dachte an 2^64.
    Aber ist ja 2^64-1. Also die letzte Zahl die in einem uint64_t Platz hat.


Log in to reply