演習8ー8
問: 二つの整数値xとyの最大公約数をユークリッドの互除法を用いて求める関数を制作せよ。
int gcd(int x, int y)
// Ex0808.c
#include <stdio.h>
int gcd(int x, int y)
{
int tmp;
int max, min;
if (x > y) {
max = x;
min = y;
} else if (x < y) {
max = y;
min = x;
} else {
tmp = x;
return tmp;
}
for (int i = 0; tmp > i; i) {
tmp = max % min;
max = min;
min = tmp;
}
return max;
}
int main(void)
{
int no1, no2;
printf("整数A:");
scanf("%d", &no1);
printf("整数B:");
scanf("%d", &no2);
printf("整数A(%d)と整数B(%d)の最大公約数は %d です。\n", no1, no2, gcd(no1, no2));
return 0;
}
コメント
ユークリッドの互除法がわかれば大丈夫。ぐぐれば公式は出てきます。
もっと最適化できるとは思う。
書籍情報
コメント