私はここでこのウェブサイトに新しいです、そして、私はここで楽しい時間があることを願っています。私は現在割り当てをしており、現在、プログラムが最大公約数、すなわちGCDを計算して表示するために2つの整数を求める最初の質問に固執しています。質問によると最大公約数(GCD)を得るために2つの整数を求めますか?
:
GCDを計算するための古典的なアルゴリズム、ユークリッドのアルゴリズムは として行くとして知られているが、以下:メートルみようとnは2つの数値を含む変数です。 nが0の場合、停止します。 m にはGCDが含まれています。それ以外の場合は、mをnで割ったときの余りを計算します。 nをm にコピーし、残りをnにコピーします。そして、nはそのヒントを使用して0
であるかどうかをテストし始め、このプロセスを繰り返し、私は次のようにコードを書くことにしました:
#include <stdio.h>
int main() {
int first, second, m, n, GCD = 0;
printf("Enter two integers: ");
scanf("%d%d", &first, &second);
if (first > second) {
m = first;
n = second;
} else {
m = second;
n = first;
}
while(1) {
if (n == 0) {
GCD = m;
break;
} else {
m = n;
n = m % n;
}
}
printf("Greatest Common Divisor: %d\n", GCD);
}
をしかし、いくつかの理由で、GCDは常に小さい出力しますそれは、サンプル出力に応じて、表示されるべき場合
Enter two integers: 12 28
Greatest Common Divisor: 12
:
それは、whileループの間に行うことになった計算を無視ほぼ同様に整数N、Enter two integers: 12 28
Greatest Common Divisor: 4
私が間違っていることはありますか?常にゼロ:
最初のサイクルで2つの数字が「間違った方法で丸められている」かどうかは関係ありません。とにかく(正しい)アルゴリズムはそれらを逆にします。したがって、ループの前に特別なケースコードは必要ありません。 –