• ベストアンサー
  • すぐに回答を!

階乗

  • 質問No.5037593
  • 閲覧数822
  • ありがとう数2
  • 回答数2

お礼率 86% (103/119)

現在JAVAでプログラミングの課題を行っています。階乗計算のプログラムを作成しているのですが、一定値以上の値はマイナスがついたり、数値が正しく計算されなかったりと少しおかしいところがあります。どうしてそうなるのか、またエラーが起きるときと起きないときは具体的に何が違うのかを教えていただきたいです。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 68% (162/236)

階乗計算でおそらく整数の変数を使用されていると思いますが、Javaの整数の変数は以下のように扱える範囲が限られます(他のプログラム言語でも同様のことが言えますが…)。

byte: -128~+127
short: -32768~+32767
int: -2147483648~+2147483647
long: -9223372036854775808~+9223372036854775807

なお、範囲の最大値(intなら+2147483647)に+1を行うと範囲の最小値(intなら-2147483648)に循環されます。
また範囲の最小値に-1を行うと範囲の最大値に循環されます。
一定値以上の値が負になったり、数値が正しく計算されなかったりするのはそのためです。

エラーについては実際にどのようなエラーが発生するのかを提示して頂ければお答えできますが…。
お礼コメント
rainhater

お礼率 86% (103/119)

なるほど、たいへん分かりやすかったです。整数の変数はintになってましたんで、13!からおかしくなったみたいです。
エラーというのは変な値が出てきたんでエラーなのかな?と思っただけで、実際にメッセージが表示されたわけではないので大丈夫です。
具体的な理由が分かってスッキリしました。ありがとうございました。
投稿日時:2009/06/12 13:37

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 27% (40/147)

ソース示さないと分かんないですよ.以下にサンプルのソースを載せておきます.参考にしてください.

import java.io.*;

class Factrial {

public static void main(String args[]) throws Exception {

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

System.out.print("input natural number: ");
int number = (new Integer(in.readLine())).intValue();

System.out.println(number + "! =" + factrial(number));
}

static int factrial(int number) {

int factrial = 1;

for (int i = 1; i <= number; i++) {
factrial = i * factrial;
}
return(factrial);
}
}
お礼コメント
rainhater

お礼率 86% (103/119)

ありがとうございました。
投稿日時:2009/06/12 13:27
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ