2016-10-20 1 views
1

私はここでこのウェブサイトに新しいです、そして、私はここで楽しい時間があることを願っています。私は現在割り当てをしており、現在、プログラムが最大公約数、すなわち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 

私が間違っていることはありますか?常にゼロ:

+0

最初のサイクルで2つの数字が「間違った方法で丸められている」かどうかは関係ありません。とにかく(正しい)アルゴリズムはそれらを逆にします。したがって、ループの前に特別なケースコードは必要ありません。 –

答えて

2
m = n; 
n = m % n; 

mnm % mあるm % nとなり、その後、nになります。あなたはどちらかする必要があります(それは同時割り当てを持っていないとして、Cでない可能)同時にそれを行う、または一時的な変数を使用する:あなたは、その後m = nを宣言しているので、あなたのwhile loop

t = m; 
m = n; 
n = t % n; 
+0

そのような単純な間違いはまだ私はそれを見ることができませんでした。本当にありがとう! :) –

1

あなたelse文はn = 0ますあなたのプログラムに従ってされn = m % nを行うに進みn = n % nあなたは、単純なコードを維持するためにこれを行うことができます

/* Finds the greatest common divisor of 2 numbers inputted */ 
#include <stdio.h> 

int main() { 

    int m, n, rem; 

    printf("\nEnter the two integers: "); 
    scanf("%d%d", &m, &n); 

    while (n != 0) { 

     rem = m % n; 

     m = n; 
     n = rem; 

    } 

    printf("\n\nGreatest common divisor: %d\n\n", m); 

} 
関連する問題