杭电acm2028求解

ProblemDescription求n个数的最小公倍数。Input输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。Output为每组测试数据输... Problem Description

求n个数的最小公倍数。

Input

输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。

Output

为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。

Sample Input
2 4 6
3 2 5 7

Sample Output
12
70

我的代码:
#include <stdio.h>
int f(int x , int y)
{
int a,b,c,t;
long d;
a=x;
b=y;
if(x<y)
{
t=x;
x=y;
y=t;
}
while(y)
{
c=x%y;
x=y;
y=c;
}
if(a*b)
d=a*b/x;
return d;
}
int main()
{
int f(int x,int y);
int i,n;
long p;
int str[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&str[i]);
if(n==1)
printf("%d\n",str[0]);
else
{
for(i=0;i<n-1;i++)
{
p=f(str[i],str[i+1]);
str[i+1]=p;
}
printf("%lld\n",p);
}
return 0;
}

提交后他说我 Wrong Answer
不知道哪里错了 在VC里运行是没错的 为了那个32位我都改了好多地方 结果还错
求高手帮忙
展开
 我来答
蓉雪球
2014-04-06 · TA获得超过8998个赞
知道大有可为答主
回答量:2846
采纳率:79%
帮助的人:691万
展开全部
//应该是精度问题,你那里写了
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
还是错
你能不能在我的基础上修改
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式