C++で二つの整数値xとyの最大公約数をユークリッドの互除法を使って求めたいのですが
int gcd(int x, int y);
一応、xが大きければ求めることはできたのですがyの値を大きくするとエラーになってしまいます。
どなたかご指摘お願いしますm(_ _)m
#include<iostream> #include<iomanip> #include<ctime> using namespace std; int gcd(int x,int y); int main(){ int x,y; cout << "xの値:"; cin >> x; cout << "yの値:"; cin >> y; cout << "xとyの最大公約数をユークリッド互除法で求めると" << gcd(x,y) << "です。\n"; return 0; } int gcd(int x, int y){ int t = 0; t = (x + y) / 2; if(x && y != t){ if(x > y) return gcd(x = x - x / y * y,y); else if (x < y) return gcd(x,y = y - y / x * x); } else if(x > y) return t = x; else return t = y; }小数点以下切捨ての方法が分からないのでintで整数にしているのですが・・・。
無駄な部分・簡単にできる部分もありましたらご指摘お願いします。
以下、問題の文のコピーです。
ユークリッドの互除法は、二つの整数を長方形の変の長さとする。短いほうの辺を一辺とする正方形で埋め尽くす。
残った長方形に対して同じ操作を繰り返す。正方形のみで埋め尽くされたとき、その正方形の辺の長さが最大公約数である。