两个数最大公约数

早觉得需要开始学学C++了,我的编程水平一直停留在高中阶段,现在是改变的时候了。

于是翻老谭C++教材的函数部分,开始做题,第一题让求最大公约数。

初中写过一个类似的小算法,在WQX上面的GVBASIC实现了自动化简分子分母,不过辗转相除显然效率更高。

A=q*B+c

辗转相除有多种实现方法,循环结构,递归都可以。

第一次实验程序:

#include <iostream>
#include <cmath>
using namespace std;
void main()
{

   int gcd(int a,int b);
   int lcm(int a,int b);
     int a,b,temp;
     cin >>a>>b;
     if (a<b) {temp=a;a=b;b=temp;} else if (a=b) cout <<"equal";
     cout <<gcd(a,b);

}

int gcd(int a,int b)
{
int r;
if (b!=0) {r=a%b;gcd(b,r);}
          else
return(a);
}

这个代码用Visual C++ Express Edition编译通过,执行结果正确。

但是这时cq提示我说,有明显错误,最后一次调用之前,gcd是没有返回值的。

然后他随意写了个程序

int comp(a,b)
{
if(a>b){m(a,b);s(a,b);}
else return b;
}
int m(a,b}{return a;}
int s(a,b){return b;}
comp(5,3)

我修改修改编译完成,发现一个很玄幻的现象。返回值是3。

cq:“微软害死程序员啊'‘= =、

然后让我调整编译器警告级别,但是我没有找到选项。

翻书复习了一下递归知识,终于明白问题所在,最终程序如下。

#include <iostream>
#include <cmath>
using namespace std;
void main()
{
     int gcd(int a,int b);
     int lcm(int a,int b);
     int a,b,temp;
     cin >>a>>b;
     if (a<b) {temp=a;a=b;b=temp;} else if (a==b) cout <<"equal";
     cout <<gcd(a,b);
}
int gcd(int a,int b)
{
int r;
if (b!=0) {r=a%b;return(gcd(b,r));}
          else
        return(a);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值