【初心者】Java の宿題ここで答えます 5.0【歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0720デフォルトの名無しさん
05/03/08 18:41:06了解。
アルゴリズムという用語の説明として、「ユークリッドの互除法」が解説されています。
Javaのソース付き。
http://hwb.ecc.u-tokyo.ac.jp/current/CDD1B8ECBDB82FA5A2A5EBA5B4A5EAA5BAA5E0.html
ほとんどの場合において、ユークリッドの互助法を使ったほうが速い。
maxYakusu(100, 100)
と呼ばれた場合、2から100まで順に調べるのと、いきなり num1 を num2 割ってみるのとでは、速度の差は歴然。
あと、>>716 に引用したメソッドには、バグがある。パラメタ num1 と num2 の両方に、
int 型の最大値である 2147483647 を渡した場合、for ループの中でいったん正しい値 (=2147483647)
をみつけて変数 max に代入するが、ループを抜けるかどうかの条件を調べる前に i++ が行われて
i の値が -2147483648 (マイナスの数!) になってしまい、ループを永遠に抜け出せない。
そのまま i の値はマイナスのまま絶対値を減らし続け、i == 0 となった時に、
「java.lang.ArithmeticException: / by zero」と、例外を吐いて落ちる。
■ このスレッドは過去ログ倉庫に格納されています