aとbの最大公約数を求める関数

[戻る]
矢頭 2010/06/28(月) 21:18:00
動作環境はWindowsVista C++ 2008です。
 正の整数aとbの最大公約数を求める関数です。
#include <stdio.h>

int gcd(int a, int b) {

    int r = a % b;
    if (r = 0)
        return(b);
    else
        a = b, b = r;
    return(a);
}

int main(void) {

    int a,b,c;

    printf("二つの整数を入力してください\n");
    scanf("%d %d,&a,&b");

    c = gcd(a, b);

    printf("%dと%dの最大公約数=%d\n",a,b,c);

    return (0);
}
このように、ある程度できたのですが
どこかが間違っているらしく動いてくれません。
おそらく前半部分に間違いがあると思うのですが、
自分にはわからずお手上げ状態です。
どなたか、わかる方がいらっしゃったらご教授下さい。

ちゃぼ 2010/06/28(月) 21:46:28
こまかいことは別として こんぽんてきには再帰をつかうのが常套手段

επιστημη [E-Mail] [HomePage] 2010/06/28(月) 21:53:21
loopなしには求められんでしょうね

int gcd(int a, int b)
{
   while ( b ) {
      int t = a % b;
      a = b;
      b = t;
   }
   return a;
}

> こんぽんてきには再帰をつかうのが常套手段

んなこたーない。

矢頭 2010/06/28(月) 22:12:21
[[解決]]
επιστημη様
お答え頂きありがとうございました。
#include <stdio.h>

int gcd(int a, int b) 
{
   while ( b ) {
      int t = a % b;
      a = b;
      b = t;
   }
   return (a);
}

int main(void) {

    int a,b,c;

    printf("二つの整数を入力してください\n");
    scanf("%d %d",&a,&b);

    c = gcd(a, b);

    printf("%dと%dの最大公約数=%d\n",a,b,c);

    return (0);
}
これで問題なく動きました。

επιστημη [E-Mail] [HomePage] 2010/06/28(月) 22:23:11
再帰使うと:

int gcd(int a, int b) {
  return b ? gcd(b, a%b) : a;
}

古いスレッドには追加発言できません。