标题:求两个数的最小公倍数这题,为什么答案是错的
只看楼主
菁菁菁菁
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-12-10
结帖率:100%
已结贴  问题点数:20 回复次数:4 
求两个数的最小公倍数这题,为什么答案是错的
程序代码:
# include <stdio.h>

int main()
{
    int A, B, t1, t2, t, min, temp;
    scanf("%d %d", &A, &B);
    temp = A*B;
    while (1)
    {
        if (A > B)
        {
            t = A;
            A = B;
            B = t;        
        }
        t1 = B - A;
        t2 = A;
        A = t1;
        B = t2;
        if (A==0)
            break;
    }
    min = temp / t2;
    printf("%d\n", min);
    
    return 0;
}[local]1[/local][local]2[/local]


1.png (136.35 KB)


QQ截图20171210165742.png (32.03 KB)
搜索更多相关主题的帖子: 两个数 最小公倍数 答案 min temp 
2017-12-10 17:06
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
得分:10 
完全没问题啊。逻辑都正确
2017-12-10 19:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
你的代码我是看不懂(一大堆的变量,还混在一起),但“temp = A*B;”这句你考虑过溢出没有?!

题目中只说了A\B的范围,没说结果的范围,那我善意的假定不是作者忘了
程序代码:
#include <stdio.h>

unsigned gcd( unsigned a, unsigned b )
{
    while( b != 0 )
    {
        unsigned t = a;
        a = b;
        b = t%b;
    }
    return a;
}

int main( void )
{
    unsigned A, B;
    scanf( "%u%u", &A, &B );
    printf( "%llu\n", A*1ull/gcd(A,B)*B );
}

2017-12-11 08:59
菁菁菁菁
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-12-10
得分:0 
回复 3楼 rjsp
原来是要用long long 类型啊,我们老师如是说
2017-12-12 20:28
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
得分:0 
你定义的A,B等变量是int类型,但题目要求A,B在1-10E9,不知道你的平台是多少位的,如果是16位的话(-32768~32767)容易发生溢出,32位的话(-2147483648~2147483647)
如果A*B值较小的话,你的代码是没有问题的,输出结果也是正确的。
2017-12-12 20:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483278-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032565 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved