0

2の累乗をコーディングする最も効率的な方法は、整数のビットシフトを使用することです。

1 << n私にくれます2^n

intただし、またはで許可されている最大値よりも大きい数がある場合long、2の累乗を効率的に操作するために何を使用できますか?

(数値に対して加算、乗算、除算、モジュラス演算を実行できる必要があります)

4

5 に答える 5

8

これはあなたが必要なものですか?

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

これは、n=1000の場合の結果です。

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
于 2010-05-08T02:27:52.580 に答える
3

「2の累乗」でどのような操作を実行する必要がありますか?たとえば、除算と乗算だけの場合はlog2、問題の2の累乗を保持し、代わりに減算と加算を使用できます。どんな種類の「操作」が必要かを知らなければ、効率的に「操作」する方法について良い提案をすることは不可能です;-)。

于 2010-05-08T02:23:11.230 に答える
1

簡単: long:-)

浮動小数点を気にしない場合はdouble、2から2^1023までのすべての累乗を正確に表すことができます。

それ以外の場合は、実行している「操作」の種類によって異なります。

于 2010-05-08T02:26:29.447 に答える
1

必要なもののように見えjava.math.BigIntegerます。

、、、、そしてもちろんmod、、、shiftLeftがあります。これは不変タイプ(ala )であるため、最終的に最も効率的な方法ではないかもしれませんが、パフォーマンスの問題として確実に特定されない限り、心配する必要はありません。shiftRightaddmultiplysubtractdivideString

于 2010-05-08T02:38:54.493 に答える
0

正確である必要がありますか?

それ以外の場合は、longにintの2を掛けたものとして表すことができます。

例:

x = 15 * 2 ^ 123

于 2010-10-10T18:29:57.980 に答える