读书人

初学者。求N个数的最小公倍数

发布时间: 2012-04-01 17:23:46 作者: rapoo

菜鸟求救。求N个数的最小公倍数
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1070

描述

求n个数的最小公倍数。

输入

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

输出

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

样例输入


2 4 6
3 2 5 7

样例输出


12
70


[解决办法]
你的错误是什么?可以说详细一点吗?
[解决办法]
你的错误是什么?可以说详细一点吗?
[解决办法]
#include<stdio.h>
int gcd(int m,int n)
{
int r;
while(r=m%n)
{
m=n;n=r;
}
return n;
}

int main ()
{
int n,i,a[10000],s;

while(printf("输入多少个数字:"),scanf("%d",&n),n>0){
s=1;
for(i=0;i<n;i++)
{
printf("输入一个数字:");
scanf("%d",&a[i]);
}
s=(a[0]*a[1])/gcd(a[0],a[1]);
for(i=2;i<n;i++)
{
s=(s*a[i])/gcd(s,a[i]);
}
printf("%d\n",s);
}
return 0;
}
试一下我修改的这个,你要两个两个的求,也就是说先求前两个,再以求的数字作为一个新值与下一个数字进行,依次类推即可得出答案。
[解决办法]

[解决办法]

探讨
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1070

描述

求n个数的最小公倍数。

输入

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

输出

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

[解决办法]
32位整数的最大值是2147483647,你可以加多检查这个最小公倍数是否在这个范围内的代码
[解决办法]
可以依次计算
[解决办法]
首先n要初始化小于0,
还有最大公约数可能有很多个,不能局限与头两个数的公约数。
要找出任意两个数的最大公约数。
[解决办法]
#include<stdio.h>
int gcd(int m,int n)
{
int r;
while(r=m%n)
{m=n;n=r;}
return n;
}

int main()
{
int n=0,i,a[10000];
while(scanf("%d",&n),n>0)
{
for(i=0;i<n;i++)scanf("%d",&a[i]);
for(i=0;i<n-1;i++)a[i+1]=a[i]*a[i+1]/gcd(a[i],a[i+1]);
printf("the result is %d\n",a[i])
}
}
[解决办法]
输出超限……一般是没有处理好程序的退出条件
[解决办法]
你把while(scanf("%d",&n),n>0)改为
C/C++ code
while(scanf("%d",&n)!=EOF){    if(n<=0)        break;}
[解决办法]
最后又少了个分号

读书人网 >C语言

热点推荐