设计一个程序实现以下功能: 从整数1开始向上找,直至m和n中较小的数,每找到一个能同时被m和n整 除的整数,将其存入一个变量中,当循环结束时,变量中存放的即为最大公约 数。

设计一个程序实现以下功能:
从整数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;
}