杭电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位我都改了好多地方 结果还错
求高手帮忙 展开
求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位我都改了好多地方 结果还错
求高手帮忙 展开
1个回答
展开全部
//应该是精度问题,你那里写了
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版本那个我知道也会 我就想知道我这个的错 溢出那里我改了 换了(a/x)*b
还是错
你能不能在我的基础上修改
你c版本那个我知道也会 我就想知道我这个的错 溢出那里我改了 换了(a/x)*b
还是错
你能不能在我的基础上修改
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询