Frage

Der effizienteste Weg, um Code Zweierpotenzen ist für Stück von ganzen Zahlen zu verschieben.

1 << n gibt mir 2^n

Allerdings, wenn ich eine Zahl, die in einem int oder einem long erlaubt größer als der größte Wert ist, was ich effizient nutzen können, um Potenzen von 2 zu manipulieren?

(I müssen in der Lage sein, zusätzlich zu führen, Multiplikation, Division und Modul Operationen an der Zahl)

War es hilfreich?

Lösung

Ist das, was Sie brauchen?

BigInteger hugeNumber = BigInteger.ONE.shiftLeft(n);

Dies ist das Ergebnis, wenn n = 1000,

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

Andere Tipps

Was Operationen brauchen Sie auf Ihrer „Zweierpotenz“ durchführen? Wenn es nur Division und Multiplikation sind, zum Beispiel, können Sie einfach weiter die log2 der Zweierpotenzen in Frage, und die Verwendung Subtraktion und Addition auf sie statt. Ohne zu wissen, was Art von "manipulieren" Sie wollen, ist es unmöglich, gute Vorschläge zu geben, wie zu effizient "manipulieren"; -)

.

Ganz einfach: long: -)

Wenn Sie Gleitkommazahlen nichts dagegen, double genau repräsentieren alle Potenzen von 2 bis zu 2 ^ 1023.

Ansonsten hängt es davon ab, welche Art von „Manipulation“ Sie tun.

Sieht aus wie java.math.BigInteger ist das, was Sie brauchen.

Es hat mod, shiftLeft, shiftRight und natürlich add, multiply, subtract und divide. Es ist eine unveränderliche Art (ala String), so vielleicht ist es nicht der ultimative effizienteste Weg, Dinge zu tun, aber wenn man beweisbar es als ein Performance-Problem identifiziert hat, würde ich nicht darum kümmern.

Ist es muß genau sein?

Ansonsten Sie repräsentieren kann, ist als ein lang durch eine zwei auf die Leistung eines int multipliziert wird.

Beispiel:

x = 15 * 2 ^ 123

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top