プロが教えるわが家の防犯対策術!

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

A 回答 (2件)

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



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

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

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

参考URL:http://www.hellohiro.com/basic/hensuu.htm
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/12 13:37

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



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);
}
}
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2009/06/12 13:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!