新手的最小公倍数问题

ytyytryrtyryr 2011-11-05 03:40:33
本人刚学c语言不久,最近要做一个用循环求最小公倍数题目。很多都不会求各位大神帮忙一下看哪里有问题。


#include<stdio.h>
void main()
{
int m,n,d;
d=(m>=n)?m:n;
printf("please enter The number m n:");
scanf("%d %d,&m,&n");
do{
d++;
}while((d/m!=0)&&(d/n!=0));
printf("最小公倍数为%d,d");
}

这使我自己编的输入m n 后就不能执行下去了 为什么?

...全文
133 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yimingxinshou 2011-11-08
  • 打赏
  • 举报
回复
“||”是或运算,两个条件中只要有一个满足便可执行,“&&”是与运算,两个条件必须都满足才可执行。求最小公倍数要求第一个同时被m,n两个数整除的数,所以只要有一个不能被整除,就要执行d++操作,继续判断下一个整数是否符合要求。用与运算符“&&”是要求两个数都不能被整除。所以要用或运算符:“||”。
ytyytryrtyryr 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yimingxinshou 的回复:]

不好意思,刚才那个错了,这样写:
#include<stdio.h>
void main()
{
int m,n,d;
printf("please enter The number m n:\n");
scanf("%d%d",&m,&n);//注意""的位置
d=(m>=n)?m:n;
do{
d++;
}while((d%m!……
[/Quote]

为什么后面要用“||”而不能用“&&”呢?
bobo_包子 2011-11-06
  • 打赏
  • 举报
回复
这中求最小公倍数的效率不敢恭维。。。
gcd(a,b)*lcm[a,b]=|ab|
求gcd(a,b)的效率很高
qishumin1014464191 2011-11-06
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{
int m,n,d;
d=(m>=n)?m:n;
printf("please enter The number m n:");
scanf("%d %d",&m,&n);// " 的位置错了
do{
d++;
}while(!(d%m==0)&&(d%n==0)); //条件错了
printf("最小公倍数为%d",d);//同样”的位置错了
getch();//想看到屏幕输出结果要加getch()
}

深度抽象 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wwwzys 的回复:]

楼主,给你个标准模版。。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAX 1000
using namespace std;
int gcd(int a,int b)//最大公约数[辗转相除法]
{
return b?gcd(b,a%b):a;
}
int lcm(int a……
[/Quote]

楼主用模版吧,循环求是垃圾代码,以上使用的是效率最高的辗转相除法,效率在O(1)~O(n)之间。远小于O(n)
qishumin1014464191 2011-11-06
  • 打赏
  • 举报
回复
那怎样初始化呢???[Quote=引用 2 楼 youkuxiaobin 的回复:]
C/C++ code
#include<stdio.h>
int main()
{
int m,n,d;

printf("please enter The number m n:");
scanf("%d ,%d",&m,&n);
d= m>=n? m:n;//……
[/Quote]
qishumin1014464191 2011-11-06
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{
int m,n,d;
d=(m>=n)?m:n;
printf("please enter The number m n:");
scanf("%d %d",&m,&n);// " 的位置错了
do{
d++;
}while(!(d%m==0)&&(d%n==0)); //条件错了
printf("最小公倍数为%d",d);//同样”的位置错了
}

qishumin1014464191 2011-11-06
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{
int m,n,d;
d=(m>=n)?m:n;
printf("please enter The number m n:");
scanf("%d %d",&m,&n);// " 的位置错了
do{
d++;
}while(!(d%m==0)&&(d%n==0)); //条件错了
printf("最小公倍数为%d,d");
}

深度抽象 2011-11-06
  • 打赏
  • 举报
回复
楼主,给你个标准模版。。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAX 1000
using namespace std;
int gcd(int a,int b)//最大公约数[辗转相除法]
{
return b?gcd(b,a%b):a;
}
int lcm(int a,int b)//求最小公倍数
{
return a*b/gcd(a,b);
}
int main()
{
//freopen("c:/in.txt","r",stdin);
//freopen("c:/out.txt","w",stdout);
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)//输入两个数,按Ctrl+z结束
{
printf("%d\n",lcm(a,b));
}

return 0;
}
pathuang68 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 youkuxiaobin 的回复:]

C/C++ code
#include<stdio.h>
int main()
{
int m,n,d;

printf("please enter The number m n:");
scanf("%d ,%d",&m,&n);
d= m>=n? m:n;//还没初始化的……
[/Quote]

这个应该就是楼主想要的。
suixinpiaodang 2011-11-06
  • 打赏
  • 举报
回复

#include<stdio.h>
void main()
{
int m,n,d;//在这里m n d 是局部变量,没初始化,是乱码。。
d=(m>=n)?m:n;
printf("please enter The number m n:");
scanf("%d %d,&m,&n");
do{
d++;
}while((d/m!=0)&&(d/n!=0));
printf("最小公倍数为%d,d");

}
可以改成这样

#include<stdio.h>
void main()
{
int m,n,d;

printf("please enter The number m n:");
scanf("%d %d",&m,&n);
d=(m>=n)?m:n;
do{
d++;
}while((d/m!=0)&&(d/n!=0));
printf("最小公倍数为%d,d");
}




yimingxinshou 2011-11-05
  • 打赏
  • 举报
回复
不好意思,刚才那个错了,这样写:
#include<stdio.h>
void main()
{
int m,n,d;
printf("please enter The number m n:\n");
scanf("%d%d",&m,&n);//注意""的位置
d=(m>=n)?m:n;
do{
d++;
}while((d%m!=0)||(d%n!=0));//“%”是求相除后余数的,"/"是相除后的整数部分,后边要用或"||",不能用与"&&"
printf("最小公倍数为%d\n",d);
}
yimingxinshou 2011-11-05
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{
int m,n,d;
printf("please enter The number m n:");
scanf("%d %d,&m,&n");
d=(m>=n)?m:n;
do{
d++;
}while((d%m!=0)&&(d%n!=0));//“%”是求相除后余数的,"/"是相除后的整数部分
printf("最小公倍数为%d,d");
}
fxw10 2011-11-05
  • 打赏
  • 举报
回复
你知道辗转相除法求最大公约数吗?用那个求最大公约数,然后利用“最小公倍数=两数的乘积/最大公约数”即可
youkuxiaobin 2011-11-05
  • 打赏
  • 举报
回复
 #include<stdio.h>
int main()
{
int m,n,d;

printf("please enter The number m n:");
scanf("%d ,%d",&m,&n);
d= m>=n? m:n;//还没初始化的不能使用
while(!(d%n == 0&& d%m ==0))
{
d++;
}
printf("最小公倍数为%d",d);
return 0;
}
youkuxiaobin 2011-11-05
  • 打赏
  • 举报
回复

#include<stdio.h>
void main()
{
int m,n,d;

printf("please enter The number m n:");
scanf("%d %d,&m,&n");
d=(m>=n)?m:n;//还没初始化的不能使用
do{
d++;
}while((d/m!=0)&&(d/n!=0));
printf("最小公倍数为%d,d");
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧