1522843196 发表于 2020-4-18 15:23:10

最大公因数和最小公倍数!小白求助!!!

系统一直判断我的代码错误,我也不知道哪里错了,请给位帮忙看一下代码,谢谢谢谢了!!

下面是题目

输入格式
一共1行数据,包含2个整数m和n,之间使用一个空格分隔。
输出格式
输出2行,第一行为最大公约数,第二行为最小公倍数,每行行末都有一个换行符。
数据规模与约定
整数m的值约定为 1 ≤ m ≤ 1 000 000 000。
整数n的值约定为 1 ≤ n ≤ 1 000 000 000。
样例输入
32 48
样例输出
16
96

#include <stdio.h>
int main()
{
    int m, n, t, gcd, k;
    scanf("%d %d", &m, &n);
    if(m < n)//如果n》m就互换
    {
      t = m; m = n; n = t;
    }
    if(n != 0)//最后分母不为0
        {
          for(k = 1; k < n; k++)//筛选能同时被m和n整除的最大数,为最大公因数
          {
                if(m % k == 0 && n % k == 0)
                {
                    gcd = k;
                }
          }
          printf("%d\n", gcd);
          printf("%d\n", (m * n) / gcd);//最小公倍数 = (m * n)/ 最大公倍数
        }
        return 0;
}

eyys666 发表于 2020-4-18 15:48:26

代码没有错,发一下你的错误描述

liuzhengyuan 发表于 2020-4-18 16:40:05

是不是超时了,用辗转相除法试试看

1522843196 发表于 2020-4-18 17:14:05

eyys666 发表于 2020-4-18 15:48
代码没有错,发一下你的错误描述

也没有任何的报错,只是评分系统一直就说有两个评分点不给分。

耻思lhj 发表于 2020-4-18 21:47:04

本帖最后由 耻思lhj 于 2020-4-18 21:49 编辑

应该是int的取值范围有问题,输入的值太大,可能下面m*n的时候会有问题

耻思lhj 发表于 2020-4-18 22:20:02

printf("%.lf\n", ((double)m * (double)n) / gcd);
不转成double进行m*n,值太大可能出错,实测

1522843196 发表于 2020-4-20 00:52:53

耻思lhj 发表于 2020-4-18 22:20
不转成double进行m*n,值太大可能出错,实测

系统不能够这让转,它要求的是整数输出,不能够浮点数

耻思lhj 发表于 2020-4-20 13:05:47

int改成long long int类型,
输出用%lld
页: [1]
查看完整版本: 最大公因数和最小公倍数!小白求助!!!