设计一个程序实现以下功能:
从整数1开始向上找,直至m和n中较小的数,每找到一个能同时被m和n整
除的整数,将其存入一个变量中,当循环结束时,变量中存放的即为最大公约
数。
请参考,如有帮助,请采纳
int main()
{
int m=0;int n=0;
int min; //最小公倍数
scanf("%d,%d",&m,&n);
int max = m<n?m:n; //最大公约数不会超过最小数,所以假设就是m和n中的最小值
while(1)
{
if(m%max==0 && n%max==0)
{
break; //max为最大公约数,退出while循环
}
max--;
}
printf("最大公约数为:%d\n",max,);
return 0;
}
要是非要用循环的话那就是:
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <stack>
#include <list>
#include <limits.h>
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
int ans = 1;
for (int i = 1; i <= min (m, n); i++)
{
if (m % i == 0 && n % i == 0)
{
ans = i;
}
}
cout << ans << endl;
return 0;
}
不过还是辗转相除法好一点
int Gcd (int m, int n)
{int r;
while (n)
{
r = m % n;
m = n;
n = r;
}
return m;
}