求大神帮忙一个菜鸟级的问题
本帖最后由 无情修罗 于 2014-12-17 21:08 编辑输入两个正整数m和n,求其最大公约数和最小公倍数。注:最大公约数也称最大公因子,指某几个整数共有因子中最大的一个;两个整数公有的倍数称为它们的公倍数,其中最小的一个正整数称为它们两个的最小公倍数。编程可用素材:printf("please input two integer numbers: ")、printf("\nthe greatest common divisor is …、printf("\nthe least common multiple is …。
<p> <div class="blockcode"><blockquote>#include<stdio.h>
int main()
{
int m,n,i,j,k,l,p;
printf("please input two integer numbers: ");
scanf("%d %d",&m,&n);
if(m>=n)
{
k=n;
}
else
{
k=m;
}
for(i=1;i<k;i++)
{
if((m%i==0)&&(n%i==0))
{
j=i;
}
}
if(m>=n)
{
l=m;
}
else
{
l=n;
}
for(i=l;;i++)
{
if((i%m==0)&&(i%n==0))
{
p=i;
break;
}
}
printf("\nthe greatest common divisor is %d",j);
printf("\nthe least common multiple is %d",p);
return 0;
}
这是我写的可是提交答案时提示失分,未实现:m与n相等时的公约数与公倍数正确
希望帮忙解决一下.谢谢!
#include<stdio.h>
void main() /*辗转相除法求最大公约数 */
{
int m, n, a, b, c;
printf("Input two integer numbers:\n");
scanf("%d%d", &a, &b);
m=a; n=b;
while(b!=0)/* 余数不为0,继续相除,直到余数为0 */
{ c=a%b; a=b;b=c;}
printf("The largest common divisor:%d\n", a);
printf("The least common multiple:%d\n", m*n/a);
} 这个代码效率太低,有更好的算法
你的代码问题在17行for(i=1;i<=k;i++)加个=号就行了 zx154140599 发表于 2014-12-23 10:47
你的代码问题在17行for(i=1;i
十分感谢!你的方法果然很好啊! 学习一下 3000年前别人就会了,
页:
[1]