wie finden Sie die Höhe der Zeichen in unsigned long long
Hallo, ich habe 2 Frage die erste ist, die man in den Titel und der andere ist der hier:
hat unsigned long long ist die größte ganze Zahl (kann die größte Menge von Zeichen)?
verursachen, brauche ich einen int, der kann halt paar Millionen Zeichen (Ziffern) - ist das möglich? Ich bin Programmierung in C.
und dies verbindet mich zu der anderen Frage, wie kann ich die Anzeige der Höhe der Ziffern auf dem Bildschirm? ist es muss so sein?:
printf("%d", intName.length)
Dank jeder!!
unsigned long long
mit range nur 0
zu 2^64 - 1
. (18,446,744,073,709,551,615
)lange, lange ist nicht gonna schneiden Sie es. Sie müssen eine Bibliothek wie gmplib. en.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library
Warum müssen Sie zahlen, haben Millionen von Ziffern? Frage nur, da Sie "nicht verstehen" eine ziemlich gute Antwort, das lässt mich ratlos, was Sie versuchen könnten, das zu tun.
Wenn Sie eine Zahl wie 100 Ziffern könnten Sie zuweisen 100 bytes Arbeitsspeicher zum speichern von 1 Stelle als 1 byte. Würden Sie benötigen, um Ihre eigenen add/sub/div/mul... - Funktion Berechnungen. Wir waren etwas wie das zu tun in der uni in Pascal, wo wir zu treffen hatten, die Summe von 2 mega-langen floating-point-zahlen. War interessant zum üben und finden die beste Lösung.
InformationsquelleAutor NSH | 2013-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich gehe davon aus, dass, wenn Sie beziehen sich auf die Menge der Zeichen, die Sie bedeuten die Anzahl der Ziffern in der Nummer. Wenn ja, dann eine diese Frage hat alles, was Sie wissen müssen und code ähnlich wie diese
als für die Abhaltung von ein paar Millionen zahlen werden Sie wahrscheinlich wollen, mit einer Bibliothek wie Die GNU Multiple Precision Arithmetic Library die auch die Funktion
die Ihnen sagen, wie viele Ziffern Ihre Nummer hat.
von innen heraus haben wir
[sorry EINGABETASTE drücken, indem Fehler und bekam cutoff oben] von innen heraus haben wir
abs(n)
dies wird sicherstellen, dass die log10-Funktion bekommt eine positive Zahl,log10(...)
sagt uns, wie viele Potenzen von 10 sind, passen in unser Nummer... also wenn n war 100 dannlog10(100)
wäre 2, oder, wenn n 10000 dannlog10(10000)
4 sein würde. Weiter istfloor(...)
die einfach da sind, um sicherzustellen, dass das Ergebnis ein integer, da das Ergebnis von log10 war wohl nicht eine ganze Zahl ist. Schließlich fügen wir die+ 1
zu berücksichtigen, für die Letzte Ziffer in der Zahl wie die 3 in die 13, da es nicht in unserer Anzahl der Zehnerpotenzen.danke, aber es hat nicht funktioniert!
nicht kompilieren, nicht geben Sie das richtige Ergebnis, ???? Haben Sie enthalten math.h ?
InformationsquelleAutor norlesh
können Sie auch
Aber müssen Sie include inttypes.h-Bibliothek, die Ihnen Typen wie int32_t, int64_t, uint64_t.
InformationsquelleAutor Tharanga Abeyseela
C99 bietet vom Typ intmax_t (und uintmax_t), wird der größte unterstützt integer-Typ (typischerweise 64 bit).
Vorausgesetzt, Sie haben eine konforme C99 snprintf dann können Sie die Anzahl der Ziffern mit:
für einen unsigned long long-Wert (und %ju für uintmax_t.)
Sonst werden Sie haben, um einen Puffer im (igitt) oder etwas tut, was manuell wie:
auch yuk!
Aber das ist alles ziemlich irrelevant, wenn Sie wirklich wollen Millionen-stellige ganze zahlen, in welchem Fall Sie brauchen, um eine Bibliothek wie gmp-arbeiten mit so großen zahlen.
Ich bin neu in C also kann mir jemand erklären, es in basic, C-Sprache?
Ich schlage vor, Sie bekommen mehr Komfort mit den Grundlagen der C-übungen, dann haben Sie die Lösung Ihres Problems mit Hilfe der GMP-Bibliothek.
Ich weiß schon, die Grundlagen und die Millionen-stellige Zahl, ist nicht das Problem, was ich brauchen, ist die "wie-viele-zahlen" zeigen auf den Bildschirm mit einer einfachen printf(); commend. kann es sein?
InformationsquelleAutor Frank
Die maximale Länge dezimal unsigned integer einer bestimmten Art der bit-Länge
bitlen
ist gegeben durch1 + floor(log10(2^bitlen-1))
(mathematisch, ohne überläufe Rundungsfehler berücksichtigt). Die Annäherung1/log2(10) ~ 4004.0/13301
(die mit kettenbrüche, siehe http://en.wikipedia.org/wiki/Continued_fraction) führt zu der Formel1 + bitlen * 4004 /13301
(rechnerisch, D. H. die division rundet ab). Die mathematischen details sind in den Kommentaren von dem snippet unten.InformationsquelleAutor Loic