求最大公约数和最小公倍数的题,运行错误求解

img

题目是正整数n和m(<=1000000),输入保证结果在int范围内,因为m*n会溢出,我就让m先除于最大公约数了,然后再乘n可是这样就运行错误了,解释说,浮点错误,检查是否有除以0的情况,俺不懂😭

你代码贴错了吧,可以把相乘的结果用long long 类型保存。
参考如下:

#include <stdio.h>
int main()
{
    int m,n;
    int t,gys;
    long long gbs;
    scanf("%d %d",&m,&n);
    if(m>n)
        t =n;
    else
        t = m;

    //先求公约数
    for (;t>=1;t--)
    {
        if(m%t==0 && n%t==0)
            break;
    }
    gys = t;

    gbs = (long long)m/t*n;
    printf("%d 和%d 的公约数是%d,公倍数是%lld",m,n,gys,gbs);
    return 0;


}