求最大公约数
题目::编写递归函数求两个正整数a和b的最大公约数(GCD,Greatest Common Divisor),使用Euclid算法: 1.如果a除以b能整除,则最大公约数是b。
2.否则,最大公约数等于b和a%b的最大公约数。
要求用递归。
我的代码:
#include<math.h>
#include<stdio.h>
int GCD(int a,int b)
{
if (a%b==0)
return b;
else{
int result;
result=GCD(int b, int a%b);
return result;
}
}
int main(void)
{
int a,b;
scanf("%d%d",&a,&b);
printf("GCD of a and b = %d\n",GCD(a,b));
return 0;
}
错误提示:main.c: 在函数‘GCD’中:
main.c:9:14: 错误: expected expression before ‘int’
main.c:9:14: 错误: 提供给函数‘GCD’的实参太少
main.c:3:5: 附注: 在此声明
注:我用的是linux下的gcc编译器,求大婶指点。
int GCD(int a,int b)
{
int result; //
if (a%b==0)
return b;
else{
result=GCD(b,a%b); //
return result;
}
}加//标注的地方看看,都是些细节问题。 接着楼上的哥们回答..
要求a> b嘛,但是a< b也有可能,加一个函数
void swap(int &a,int &b)
{
if(b> a)
{
b^= a;
a^= b;
b^= a;
}
}
tsembrace 发表于 2013-10-10 23:13 static/image/common/back.gif
加//标注的地方看看,都是些细节问题。
谢谢。确实能解决问题,不过我想问的详细一点。在你的代码中讨论吧。我试了下,去掉第三行代码也能编译并且运行,问题主要是出在第七行。为什么第一行要加int 而第七行不用呢? 夏七夕 发表于 2013-10-12 11:37 static/image/common/back.gif
接着楼上的哥们回答..
要求a> b嘛,但是a< b也有可能,加一个函数
谢谢。。确实。。我之前的代码有问题,领教了 夏七夕 发表于 2013-10-12 11:37 static/image/common/back.gif
接着楼上的哥们回答..
要求a> b嘛,但是a< b也有可能,加一个函数
被你坑了。。这段函数是多余的,在a<b的情况下运行一次GCD函数会自动交换a,b的。。不运行一下还真以为我错了。。 贴地快感 发表于 2013-10-12 13:17 static/image/common/back.gif
谢谢。确实能解决问题,不过我想问的详细一点。在你的代码中讨论吧。我试了下,去掉第三行代码也能编译并 ...
1、去掉第三行能编译运行?是指int result这句么?
去掉的话应该会有问题,都没定义,怎么可以使用呢?
2、第一行加int是作为GCD这个函数定义的时候必须标注返回类型啊
第七行不是不需要,而是不能加。因为第七行属于调用该函数了。调用函数时候括弧里只能是实参,如果你再加给类型标识,那就成了又新定义了一个该类型的变量了;而实际上就算要定义,你也应该在代码块开头定义。所以报错也就必然了。
贴地快感 发表于 2013-10-12 13:24 static/image/common/back.gif
被你坑了。。这段函数是多余的,在a
确实不需要
不管a,b谁大谁小,通过该函数都可以使得其等效为GCD(max(a,b),min(a,b)) tsembrace 发表于 2013-10-12 15:28 static/image/common/back.gif
1、去掉第三行能编译运行?是指int result这句么?
去掉的话应该会有问题,都没定义,怎么可以使用呢?
...
好,谢谢。不是去掉第三行能运行,我原来的代码已经声明了result,你把声明提前了,但是我调试的时候发现不提前也能通过编译。总之谢谢 贴地快感 发表于 2013-10-12 13:24 static/image/common/back.gif
被你坑了。。这段函数是多余的,在a
羞愧的说一句,我错了哈 贴地快感 发表于 2013-10-12 13:17 static/image/common/back.gif
谢谢。确实能解决问题,不过我想问的详细一点。在你的代码中讨论吧。我试了下,去掉第三行代码也能编译并 ...
第七行加int,what is mean? 夏七夕 发表于 2013-10-12 17:09 static/image/common/back.gif
第七行加int,what is mean?
第七行是函数调用,不加int。。我刚今天知道。。函数声明是后要加参数的变量类型,调用时就不用。 tsembrace 发表于 2013-10-10 22:03 static/image/common/back.gif
加//标注的地方看看,都是些细节问题。
现在我又遇到问题了,还是最大公约数问题,直接问你好了。代码贴出来如下,用while。#include<stdio.h>
int GCD(int a, int b)
{
while(a%b!=0){
a=b;
b=a%b;
}
return b;
}
int main(void){
int a,b;
scanf("%d%d",&a,&b);
printf("%d",GCD(a,b));
return 0;
} 能通过编译,运行时出错,提示:“浮点数例外 (核心已转储)”,搞不懂什么意思。 贴地快感 发表于 2013-10-13 08:05 static/image/common/back.gif
现在我又遇到问题了,还是最大公约数问题,直接问你好了。代码贴出来如下,用while。能通过编译,运行时出 ...
while代码段里
--------加个过渡值int GCD(int a, int b)
{
int temp;
while(a%b!=0){
temp=a;
a=b;
b=temp%b;
}
return b;
} tsembrace 发表于 2013-10-13 10:58 static/image/common/back.gif
while代码段里
--------加个过渡值
这么简单,。。。坑了
页:
[1]