注册 登录
编程论坛 C++教室

输入3个数,求它们的最小公倍数,不知道错在哪

zhoujin1994 发布于 2013-04-25 09:12, 1484 次点击
#include<stdio.h>
void main()
{  int x,y,z,j;
   int t,m,n;
  scanf("%d,%d,%d ",&x,&y,&z);
  j=1;
  t=m=n=1;
/********found********/
 while(t!=0&&m!=0&&n!=0)
  {j=j+1;
   t=j%x;
   m=j%y;
     n=j%z;
  }
 printf("The minimal common multiple is %d\n",j);
/********found********/
}
12 回复
#2
zhoujin19942013-04-25 16:11
这个程序的编译,组建和执行都没问题,可就是结果总是那两个数中的最小那个,求解答
#3
apull2013-04-25 19:57
while((t+m+n)!=0)
#4
zhoujin19942013-04-25 22:49
回复 3楼 apull
但是,执行没结果啊,编译,组建都没错误
#5
apull2013-04-26 01:06
scanf("%d,%d,%d ",&x,&y,&z);
你这个输入时最后要多输入一个空格才算是输入完成。多按几下回车。
#6
xiaohui012013-04-26 15:57
把那个&&改成||
#7
风雨1232013-04-26 19:25
我是做的 c++的,思路:先求出2个数的最大公约数,然后在求出三个数的最大公约数;最后求出最小公倍数。
程序代码:
#include <iostream>
using namespace std;
int main()
{
   int n,m,l,r,k;
   cin>>n>>m>>l;
   r=1;k=n*m*l;
   while(r)//先求出2个的数最大公约数
   {
       if(n>m){int t=n;n=m;m=t;}
       r=m%n;
       m=n;
       n=r;
   }
   r=1;
   while(r)//3个最大公约数
   {
       if(m>l){int t=m;m=l;l=t;}
       r=l%m;
       l=m;
       m=r;
   }
   cout<<k/l<<endl;//最小公倍数
   return 0;

}
#8
不得不编程2013-04-26 19:40
你的while语句的判断条件是它们中有一个为零就循环结束了,函数里面t=j%x,m=j%y,n=j%z;j=j+1当循环时肯定是当j=最小值得时候t,m,n里面就有一个取余为零了啊,这时while语句就结束了,这样j的值最终肯定就是最小值,
#9
zhoujin19942013-04-26 21:50
还是没结果
#10
jessychen2013-04-26 22:05
#include <iostream>
#include<stdio.h>
#include <math.h>
using namespace std;
void main()
{  int x,y,z,j;
   cout<<"输入三个整数,每输入一个回车结束:"<<endl;
   cin>>x>>y>>z;   
   j=x;
   while ((j%x!=0)||(j%y!=0)||(j%z!=0)) j++;
     
printf("The minimal common multiple is %d\n",j);

}
#11
不得不编程2013-04-26 23:16
回复 9楼 zhoujin1994
#include<stdio.h>

void main()
{
    int x,y,z;
    int m,i;
    int p,q,r;
    scanf("%d%d%d",&x,&y,&z);

    m=x*y*z;

    for(i=1;i<=m;i++)
    {
        p=i%x;
        q=i%y;
        r=i%z;

        if(p==0&&q==0&&r==0)
            break;
    }

    printf("最小公倍数为:%d\n",i);
}
这段代码能用,看看有没什么启发
#12
zhoujin19942013-04-27 08:13
回复 11楼 不得不编程
谢了
#13
黎忘2013-04-27 14:57
兄弟用数组试试吧
1