QA@IT

for文を使った2の30乗までの数を合計する方法を教えてください。

3811 PV

またまたお世話になります。
public class Program {
public static void main(String[] args) {
int n = 1;
for (int i = 1; i <= 30; i++) {
n *= 2;
}
System.out.println(n);
}
}
ここまではできるのですが、nの値を合計するにはどうすればよいでしょうか。
よろしくお願いします。

回答

合計値を格納する為の変数(仮にsとすると)を用意して
ループ前に1(最初のnの値)にしておいて
ループ内でnを2倍した後、sにnを足していけばよいです。

処理の意図が分かりませんが
この計算の結果は2の31乗から1を引いた数になるので
(1<<31) - 1 で計算出来ます。ただし32ビット長であるintにて
この計算を行うとマイナスになってしまい正しく計算できないのでlongによる
計算にする必要が発生します。

編集 履歴 (1)

public class Program {
public static void main(String[] args) {
long n = 1,sum = 0;
for (long i = 1; i <= 30; i++) {
n = n * 2;
sum += n;
}
System.out.print(sum + 1);
}
}
出来ました。
longを使えばいいんですね、煮詰まって分からなくなっていました。
ありがとうございました。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。