Denken Sie darüber nach, Zahlen mit einer Struktur wie dieser als Folgen von Dezimalziffern zu speichern:
%Vor%Zum Beispiel könnte die Zahl 123456 als
initialisiert werden %Vor% Die Reihenfolge der umgekehrten Ziffern ist wichtig für die einfache Berechnung. Insbesondere ist der Stellenwert von n.d[i]
n.d[i]
* 10 ^ i.
Nun, ein paar Fragen:
num
hinzufügen? num
? num
s zusammenfügen? num
mit zwei multiplizieren? num
mit einer einzelnen Ziffer multiplizieren? num
mit 10 multiplizieren? num
s zusammen multiplizieren? TIPP: Machen Sie einige Bleistift- und Papier-Multiplikationen und sehen Sie, wie sie funktionieren. Wenn Sie diese Abfolge von Fragen durcharbeiten, sollten Sie in der Lage sein, für jeden Schritt eine Funktion zu schreiben und diese Funktionen für die Beantwortung der späteren Fragen wiederzuverwenden. Dies führt zu einem sehr einfachen und nicht optimierten langen (gut, up to MAXDIGIT
digits) Integer-Paket für Addition und Multiplikation von positiven Zahlen.
Andere Fragen:
num
, um sowohl negative als auch positive Zahlen darzustellen? num
durch ein anderes (ignoriere Reste)? Das ist kniffliger als die Multiplikation, aber beginnen Sie wieder mit ein paar Bleistift- und Papier-Divisionen und überlegen Sie genau, was Sie tun. Ich werde Ihnen den Code nicht geben, aber ich kann ein paar Vorschläge für Ansätze machen:
Viel Glück
Dies ist eine häufige Frage im einführenden Informatikunterricht an der Universität. Die primären Bereiche des Fokus sind a) zu verstehen, wie (ganzzahlige) Zahlen als Binärziffern gespeichert werden, und b) die Grundlagen von Datenstrukturen, wobei, wenn eine Programmiersprache nicht die gewünschte Datenstruktur selbst bereitstellt, Sie meta verwenden können oder Auflistungsstrukturen, z. B. struct
in C, class
in C ++ oder record
in Pascal.
Wie wird eine kleinere ganze Zahl in einem Computer gespeichert? In C haben Sie Datentypen char, short, int, long
, die alle zum Speichern von Ganzzahlen verschiedener Größen verwendet werden können. (Ich werde long long
für diese Diskussion ignorieren.) Sagen wir aus Gründen der Allgemeinheit, dass auf einer gegebenen 32-Bit-Plattform die Größen 8-Bit, 16-Bit, 32-Bit bzw. 64-Bit sind. Berücksichtigen Sie die Werte, die dargestellt werden können (vereinfacht als unsigniert).
Nun, wie könnten Sie eine größere Ganzzahl speichern, die nicht in einem 64-Bit-Zeichen ohne Vorzeichen gespeichert werden kann? Erstellen Sie Ihren eigenen großen Integer-Datentyp, der aus mehreren kleineren (aber normalen) Ganzzahlen besteht, sodass sie größere Werte darstellen.
Ich denke, das sollte dich in die richtige Richtung weisen und dir ermöglichen, deine eigene Antwort auf deine Hausaufgaben oder Prüfungsfragen zu schreiben.
Wenn es nur für die Anzeige ist, würde ich eine <stdio.h>
(für den berüchtigten printf) aus der c-Standardbibliothek oder vielleicht die <string.h>
vorschlagen, um etwas zu ändern.
Tags und Links c memory-management integer integer-arithmetic