aとbの最大公約数を求める関数 – プログラミング – Home

aとbの最大公約数を求める関数
 
通知
すべてクリア

[解決済] aとbの最大公約数を求める関数


矢頭
 矢頭
(@矢頭)
ゲスト
結合: 14年前
投稿: 12
Topic starter  

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


引用未解決
トピックタグ
ちゃぼ
 ちゃぼ
(@ちゃぼ)
ゲスト
結合: 14年前
投稿: 1
 

こまかいことは別として こんぽんてきには再帰をつかうのが常套手段


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

loopなしには求められんでしょうね

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

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

んなこたーない。


返信引用
矢頭
 矢頭
(@矢頭)
ゲスト
結合: 14年前
投稿: 12
Topic starter  

επιστημη様
お答え頂きありがとうございました。
#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);
}
これで問題なく動きました。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

再帰使うと:

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました