注册 登录
编程论坛 C++教室

利用递归求两个数的最大公约数-已解决

随心 发布于 2007-10-24 11:23, 1053 次点击

/*
Name: 利用递归求两个数的最大公约数
Copyright:
Author:
Date: 24-10-07 09:31
Description:
*/
#include <iostream>
using namespace std;
int rgcd(int a,int b)
{
if(b!=0)
return rgcd(b,a%b);
return a;
}

int main()
{
int v1,v2;
cin>>v1>>v1;//这里粗心
cout<<rgcd(v1,v2)<<endl;
system("pause");
return 0;
}
看下这个程序结果为什么不对

[此贴子已经被作者于2007-10-24 11:53:14编辑过]

2 回复
#2
随心2007-10-24 11:35
这个是我根据递归写的,写完了一运行,结果总是1,郁闷死了.
#3
随心2007-10-24 11:37

这个是用辗除法写的:

/*
Name:
Copyright:
Author:
Date: 24-10-07 09:44
Description:
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,num1,num2,temp;
printf("please input two numbers:\n");
scanf("%d %d",&num1,&num2);
if(num1)//把两个数互换
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;//让a、b分别保存num1、num2的副本
b=num2;
while(b!=0)/*利用辗除法,直到b(余数)为0为止*/
{
temp=a%b;//取a和b的余数
a=b;//把b赋给a
b=temp;//把它们的余数赋给b
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
system("pause");
return 0;
}

1