设计一个求两个数的最大公约数的通用函数,算法不限,要求能反复输入数据并输出其最大公约数.

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 08:00:19

设计一个求两个数的最大公约数的通用函数,算法不限,要求能反复输入数据并输出其最大公约数.
设计一个求两个数的最大公约数的通用函数,算法不限,要求能反复输入数据并输出其最大公约数.

设计一个求两个数的最大公约数的通用函数,算法不限,要求能反复输入数据并输出其最大公约数.
#include
/* 最大公约数 */
int GreatestCommonDivisor ( int m,int n )
{
\x05int r;
\x05do
\x05{
\x05\x05r = m % n;
\x05\x05m = n;
\x05\x05n = r;
\x05} while ( r != 0 );
\x05return m;
}
int main (void)
{
\x05int m,n;
\x05while ( scanf ( "%d%d",&m,&n ) != EOF ) /* 输入文件结尾符(Ctrl + Z) 结束 */
\x05{
\x05\x05printf ("最大公约数是%d.\n",GreatestCommonDivisor(m,n) );
\x05}
\x05return 0;
}

用的我吧,我的代码思路清晰易懂。以a和b为例:
顺便把最小公倍数也求出来。
#include
void main()
{
int f1(int x,int y);
int a,b,c,d;
printf("请输入a和b的值:");
scanf("%d%d",&a,&b);
c=f1(a,b);

全部展开

用的我吧,我的代码思路清晰易懂。以a和b为例:
顺便把最小公倍数也求出来。
#include
void main()
{
int f1(int x,int y);
int a,b,c,d;
printf("请输入a和b的值:");
scanf("%d%d",&a,&b);
c=f1(a,b);
printf("%d和%d的最大公约数是%d\n",a,b,c);
d=a*b/c;
printf("%d和%d的最小公倍数是%d\n",a,b,d);
}
int f1(int x,int y)
{
int m,i,j;
m=(xwhile(i!=0||j!=0)
{
i=x%m;
j=y%m;
m--;
}
return(m+1);
}

收起

采用辗转相除法
void fun(int a,int b)
{
int c,d;
printf("请输入a=");
scanf("%d",&a);
printf("\n请输入b=");
scanf("%d",&b);
c=a/b;
d=...

全部展开

采用辗转相除法
void fun(int a,int b)
{
int c,d;
printf("请输入a=");
scanf("%d",&a);
printf("\n请输入b=");
scanf("%d",&b);
c=a/b;
d=a%b;
while(c)
{
a=c;
b=d;
c=a/b;
d=a%b;
}
printf("\na与b的最大公约数是:",b);
}

收起

这个问题好,是先将A、B分解为P(i)^Q(i),还是有更好滴算法?

**********代码**********
#include
void xiaocd();
void caidan();
void zdgys(int i,int j);
void xiaomain();
void main()
{
printf("\t\t********欢迎使用最大公约数求算公式!!!****...

全部展开

**********代码**********
#include
void xiaocd();
void caidan();
void zdgys(int i,int j);
void xiaomain();
void main()
{
printf("\t\t********欢迎使用最大公约数求算公式!!!********\n\n");
xiaomain();
}
void xiaomain()
{
caidan();
xiaocd();
}
void xiaocd()
{
printf("是否继续操作(是(1)/否(0))?:[ ]\b\b");
int a;
scanf("%d",&a);
if(a==1) xiaomain();
else printf("\n\n\t\t\t******欢迎下次使用!!!******\n\n\n");
}
void caidan()
{
int i,j;
printf("请输入两个数字(从小到大的顺序):\n数字1 ");
scanf("%d",&i);
printf("数字2 ");
scanf("%d",&j);
if(i>=j)
{
printf("操作错误!!!");
caidan();
}
zdgys(i,j);
}
void zdgys(int i,int j)
{
int s=1,m,gys=0;
for(s;i>=s;s++)
{
if(j%s==0)
{
m=i%s;
if(m==0) gys=s;
}
}
printf("%d和%d的最大公约数是:%d ",i,j,gys);
}
**********操作说明**********
根据显示的操作提示要求,输入字符后,回车键即可进行下一步运行(或操作)!!!

收起