感觉逻辑语法都对,结果就是不对😥

img


唉,为什么代码运行出来一直是1,感觉逻辑上也没毛病啊

你的辗转相除法写错了。

#include<iostream>
#include<cstdio>
using namespace std;
 
int fun(int m,int n){
    int rem;            //余数,当余数为0的时候,最后的m即为最大公约数
    //先用较小的数对较大的数取余,再用余数对较小的数求余,直到余数为零 
    while(n > 0){
        rem = m % n;
        m = n;
        n = rem;
    }
    return m;            //将结果返回            
}
int main(){
    int n,m;
    cin>>m>>n;
    cout<<"m和n的最大公约数为:"<<fun(m,n)<<endl;
    return 0; 
} 

img


第22行应改为:


for(i=1;i <= min;i++)

除了i<min这里改成i<=min外,别的应该没问题,你输入的数是什么?你输入2和3这种,公约数肯定是1。你输入12 和16试试,结果应该是4

#include <stdio.h>
int main()
{
    int a,b;
    int min;
    scanf("%d%d",&a,&b);
    if(a>b)
        min = b;
    else
        min = a;
    int ret = 0;
    int i;
    for (i = 1;i<=min;i++) //这里是小于等于
    {
        if(a%i == 0 && b%i == 0)
            ret = i;
    }
    printf("%d和%d的最大公约数是%d\n",a,b,ret);
    return 0;
}



循环语句改为i<=min;你是怎么输入数据的呢?