一个简单的C问题,我却看不出来是哪里理解错误了。
#include<stdio.h>
#define NUM 1000
int Gcd(int a,int b,int c);
int main()
{
int m,n;
int gcd,lcm;
//int i;
int k=1;
printf(" to get the greatest common divisor and the least commom mulitiple:");
printf("\nplease input the number(only 2 int numbers):");
scanf("%d%d",&m,&n);
gcd=Gcd(m,n,k);
lcm=m*n/gcd;
printf("their greast common divisor is %d\n",gcd);
printf("their least common multiple is %d\n",lcm);
return 0;
}
int Gcd(int a,int b,int k)
{
int temp;
if(a==0)
return b*k;
if(b==0)
return a*k;
if(a%2==0 && b%2==0)
{
k=2*k;
Gcd(a/2,b/2,k);
}
if(a%2==0 && b%2!=0)
Gcd(a/2,b,k);
if(a%2!=0 && b%2==0)
Gcd(a,b/2,k);
if(a%2!=0 && b%2!=0)
{
if(a<b)
{
temp=a;
a=b;
b=temp;
}
Gcd(a-b,b,k);
}
//else
//return 1;
}
这是一个stein算法,求最小公倍数和最大公约数的。问题是,我输入3,12,结果错误,然而将gcd函数改成if else 类型,输入3,12就是对的。按我理解,全部写if也一样啊,大家帮忙看看哈。
[解决办法]
你不加else,递归就一直往下,到最后一层,他就不会返回到下一个算出来的数重新调用gcd..
[解决办法]
逻辑错误。#include<stdio.h>#define NUM 1000int Gcd(int a,int b);int main(){int m,n;int gcd,lcm;//int i;int k=1;printf(" to get the greatest common divisor and the least commom mulitiple:");printf("\nplease input the number(only 2 int numbers):");scanf("%d%d",&m,&n);gcd=Gcd(m,n);lcm=m*n/gcd;printf("their greast common divisor is %d\n",gcd);printf("their least common multiple is %d\n",lcm);return 0;}int Gcd(int a,int b){ if (a % b == 0) return b; else { return Gcd(b, a % b); }}
[解决办法]
soory 我理解错了。
[解决办法]
加不加都一样是错滴。
不加 返回0的情况。。除数0错误。
加了
最后 回归时 是 1.
//改成这样才德行#include<stdio.h>#include<stdlib.h>#define NUM 1000int Gcd(int a,int b,int c);int main(){int m,n;int gcd,lcm;//int i;int k=1;printf(" to get the greatest common divisor and the least commom mulitiple:");printf("\nplease input the number(only 2 int numbers):");scanf("%d%d",&m,&n);gcd=Gcd(m,n,k);lcm=m*n/gcd;printf("their greast common divisor is %d\n",gcd);printf("their least common multiple is %d\n",lcm);return 0;}int Gcd(int a,int b,int k){int temp;if(a==0)return b*k;if(b==0)return a*k; if(a%2==0 && b%2==0) return Gcd(a>>1,b>>1,k << 1);if(a%2==0 && b%2!=0)return Gcd(a>>1,b,k);if(a%2!=0 && b%2==0) return Gcd(a,b>>1,k);return Gcd( abs(a+b)>>1,abs(a-b)>>1,k);}
[解决办法]