作业帮 > 综合 > 作业

杭电acm2028求解

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/06 10:10:20
杭电acm2028求解
Problem Description
求n个数的最小公倍数.
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数.
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行.你可以假设最后的输出是一个32位的整数.
Sample Input
2 4 6
3 2 5 7
Sample Output
12
70
我的代码:
#include
int f(int x ,int y)
{
\x05int a,b,c,t;
\x05long d;
\x05a=x;
\x05b=y;
\x05if(x
//应该是精度问题,你那里写了
if(a*b)//这里可能已经超出了32位的范围了

d=a*b/x;
return d;  }

所以不能这样写,是这样写的:
#include <iostream>
using namespace std;

int nlcm(int *a,int n);
int lcm(int a,int b);
int gcd(int a,int b);

int main()
{
    int i,n,z;
    while(cin>>n)
    {
        int *a = new int[n];
        for(i=0;i<n;i++)
        {
            cin>>a[i];
        }
        cout<<nlcm(a,n)<<endl;
    }

    return 0;
}

int nlcm(int *a, int n)
{
    if (n == 1) return *a;
    else return lcm(a[n-1],nlcm(a, n-1));
}

int lcm(int a, int b)
{
    return a/gcd(a, b)*b;
}

int gcd(int a, int b)
{
    int t;
    if (a < b) {t=a;a=b;b=t;};
    if (b == 0) return a;
    else return gcd(b, a%b);
}C版本:http://zhidao.baidu.com/link?url=jBxl7-sbvpzKJg57BErLAysR_uVmy1OVy9M051cePROFt6_FckSUI9vnN057xYrAiFzqSMuhjXTJUNrt37eR0a
再问: 你c版本那个我知道也会 我就想知道我这个的错 溢出那里我改了 换了(a/x)*b 还是错 你能不能在我的基础上修改
再问: 你c版本那个我知道也会 我就想知道我这个的错 溢出那里我改了 换了(a/x)*b 还是错 你能不能在我的基础上修改
再答: 我仔细看了一下,这里还有一个问题: 你的程序只能执行一次!只能实现一组数的求最大公倍数。
再问: 其实这个我也改了 就是加EOF 我只是后来改的所以你没看到 结果还是出错
再答: 不过话说你这个做法效率太低了点吧。看得头疼了~ 可以试下面AC了的。 #include int main() { int n,i,s[100],d,x=0,m=-1; while(scanf("%d",&n)!=EOF) { for(i=0;i