| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4876 人关注过本帖
标题:【求助】杭电acm 1019 Least Common Multiple(最小公倍数)
只看楼主 加入收藏
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
结帖率:80%
收藏
已结贴  问题点数:100 回复次数:22 
【求助】杭电acm 1019 Least Common Multiple(最小公倍数)
题目要求是这样:求一组数据的最小公倍数,比如说,5,7和15的最小公倍数是105
输入要求:
开始输入一个整数,表示测试用例数。接下来输入一个整数表示这个测试例子所用多少个整数。
输出要求:
每组用例占一行输出,输出的数不超过32位整型数;

Sample Input
2
3 5 7 15
6 4 10296 936 1287 792 1

Sample Output
105
10296

我写的代码如下:
程序代码:
#include <stdio.h>

int fun (int x, int y)            //求两数的最小公倍数
{
    int        temp, r, large, small;

    if (x < y)
    {
        temp = y;
        y     = x;
        x     = temp;
    }
    large = x;
    small = y;
    while ((r = x % y) > 0)
    {
        x = y;
        y = r;
    }

    return large * small / y;
}
int    main ()
{
    int        m, n;
    int        i;
    int        a, mul;

    scanf ("%d", &m);
    while (m--)
    {
        scanf ("%d", &n);
        mul = 1;
        for (i = 0; i < n; i++)
        {
            scanf ("%d", &a);
            mul = fun (mul, a);
        }
        printf ("%d\n", mul);
    }

    return 0;
}
思路是每输入一个数,就和之前的数计算两数的最小公倍数,知道输入结束。
题目本身不难,可提交上去显示就是Wrong Answer,求指点,拜托了!
搜索更多相关主题的帖子: 测试 最小公倍数 
2011-10-06 20:41
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:10 
return large * small / y; 这超范围了  fun函数中的int改成long long 就OK

100分拿来
2011-10-06 21:47
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
回复 2楼 草狼
很遗憾,我把所有的都调成long long试过,答案依然是Wrong Answer,不信你可以拿我这程序去试

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-10-06 22:02
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
#include <stdio.h>

int fun (int x, int y)            //求两数的最小公倍数
{
    long long       temp, r, large, small;

    if (x < y)
    {
        temp = y;
        y     = x;
        x     = temp;
    }
    large = x;
    small = y;
    while ((r = x % y) > 0)
    {
        x = y;
        y = r;
    }

    return large * small / y;
}
int    main ()
{
    int        m, n;
    int        i;
    int        a, mul;

    scanf ("%d", &m);
    while (m--)
    {
        scanf ("%d", &n);
        mul = 1;
        for (i = 0; i < n; i++)
        {
            scanf ("%d", &a);
            mul = fun (mul, a);
        }
        printf ("%d\n", mul);
    }

    return 0;
}
2011-10-06 22:31
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:10 
回复 4楼 草狼
这样能 AC吗?

我就是真命天子,顺我者生,逆我者死!
2011-10-06 22:32
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
绝对能
2011-10-06 22:34
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:10 
我曾经向草狼兄弟请教过大叔的最小公倍数  但是草狼兄弟也表示无能为力

我估计这题是大数吧

                                         
===========深入<----------------->浅出============
2011-10-06 23:01
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 7楼 laoyang103
这题不是大数 只是整形范围- -
2011-10-06 23:14
wxfcyuyan
Rank: 2
来 自:中国安徽
等 级:论坛游民
帖 子:14
专家分:29
注 册:2011-9-2
收藏
得分:10 
我小改了下运行一切正常,没试过很大的数据。希望对你有帮助
#include <stdio.h>

long fun (int x, int y)            //求两数的最小公倍数
{
    long temp,r,large,small;
    if (x<y)
    {
        temp=y;
        y= x;
        x= temp;
    }
    large= x;
    small= y;
    while ((r=x%y)>0)
    {
        x=y;
        y=r;
    }
    return large*small/y;
}
int main ()
{
    int m,n;
    int i,x=1;
    int a,mul;
    printf("请输入测试用例数:");
    scanf("%d",&m);
    while(m--)
    {
        printf("第%d次测试:\n",x);
        printf("请输入要求最小公倍数的个数:");
        scanf("%d", &n);
        mul=1;
        for (i=1;i<=n;i++)
        {
            printf("请输入第%d个数:",i);
            scanf ("%d",&a);
            mul=fun(mul, a);
        }
        printf("这%d个数的最小公倍数是:%d\n",n,mul);
        x++;
    }
    return 0;
}
这样写在输入数据的时候简洁明了,不易混淆。
2011-10-06 23:43
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
这是AC代码
程序代码:
#include<stdio.h>
unsigned int LCM(unsigned int a, unsigned int b)
{
    unsigned int r, ta, tb;
    ta = a;
    tb = b;
    r = ta % tb;
    while(r)
    {
        ta = tb;
        tb = r;
        r = ta % tb;
    }
    return a / tb * b;
}
int main()
{
    unsigned int i, j, t, m, a, lcm;
    scanf("%u", &t);
    for(i = 0; i < t; i++)
    {
        scanf("%u", &m);
        scanf("%u", &lcm);
        for(j = 1; j < m; j++)
        {
            scanf("%u", &a);
            lcm = LCM(lcm, a);
        }
        printf("%d\n", lcm);
    }
    return 0;
}




重剑无锋,大巧不工
2011-10-07 00:21
快速回复:【求助】杭电acm 1019 Least Common Multiple(最小公倍数)
数据加载中...
 
   



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

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