c语言求两个数的最大公约数

输入两个数,求两个数的最大公约数,我这么写对吗?
#include <stdio.h>
int main()
{
int i,a,b,c,d;
printf("请输入两个数");
scanf("%d,%d",&a,&b);
for(i=1;i<=a;i++)
{
if (a%i==0 && b%i==0)
{
c=i;
}
}
printf("%d和%d的最大公约数为:%d",a,b,c);
return 0;
}

第1个回答  2019-08-07
#include<stdio.h>
void
main()
{
int
a,b,j=0,i,f=0,h=0;
int
u[2];
int
x[100];
int
y[100];
int
z[100];
for(i=0;i<=1;i++)
//把输入的两个数放进数组u[i]
{
scanf("%d",&u[i]);
}
for(a=1;a<=u[0];a++)
//求输入的第一个数即u[0]的所有约数,把约数全部放进x[j]
{
for(b=1;b<=u[0];b++)
{
if(a*b==u[0])
{
x[j]=a;
j++;
}
}
}
for(a=1;a<=u[1];a++)//求输入的第二个数即u[1]的所有约数,把约数全部放进一y[f]
{
for(b=1;b<=u[1];b++)
{
if(a*b==u[1])
{
y[f]=a;
f++;
}
}
}
for(a=0;a<j;a++)//找出x[]与y[]中相同的元素,把相同元素放进z[h]
{
for(b=0;b<f;b++)
{
if(x[a]==y[b])
{
z[h]=x[b];
h++;
}
}
}
printf("%d
",z[h-1]);
}
我给你稍做了修改。
你的小错误:
1.“void
mian()”是main()
2.你赋值经常赋反,必须是未知=已知。“b=x[j];e=y[f];”
3.在访问数组的时候,数组里面没有数你也访问了,这样会出错,也会浪费时间和资源。如“
for(j=0;j<=100;j++)”这里面x[]后面有很多是没有赋值的。
4.“for(h=0;h<=100;h++)/*在z[h]中各元素相比较,找出最大的元素即最大公约数*/”z[h]已经是由小到大的顺序了,只需要输出最后的那个。
5.尽量减少未知变量。
这个求最大公约数还有个简单的算法。你可以去百度查查。
希望我的回答对你有帮助。
第2个回答  2019-07-14
程序是正确的,只是算法上过于繁琐,i从1到a,所有的数都要循环一次。本回答被网友采纳

如何用C语言求两个数的最大公约数的三种算法
int d=0;\/\/计数器 while(1){ printf("输入两个数字求最大公约数:");scanf("%d%d",&a,&b);c=(a>b)?b:a;\/\/三目运算符 while(a%c!=0||b%c!=0){ c--;d++;} printf("最大公约数是:%d\\n",c);printf("%d\\n",d);} return 0;} ...

c语言求两个数的最大公约数
} printf("最大公约数为:%d\\n", b);system("pause");return 0;}

c语言求两个数的最大公约数是多少?
int a,b;scanf("%d%d",&a,&b);3、然后取a,b这两个数中的较小值,存放到变量n中。代码为:int n=a;if (n>b)n=b;4、接着从两个数a和b中的较小数开始,依次逐个减小1,以便能寻找出可以整除a和b的整数。第一个找到的整数就是整数a和b的最大公约数。代码:for(int i=n;i>=1;...

用c语言求两个数的最大公约数
在C语言中,可以使用欧几里得算法(也称为辗转相除法)来求解两个数的最大公约数。该算法基于如下原理:两个数的最大公约数等于其中较小的数和两数的差的最大公约数。以下是用C语言实现求两个数的最大公约数的代码:include<stdio.h>intgcd(inta,intb){if(b==0)returna;elsereturngcd(b,a%b...

c语言求2个数的最大公约数
c语言求2个数的最大公约数方法是:相减法,也叫更相减损法。思路:1、如果a>ba=a-b。2、如果b>ab=b-a。3、假如a=b ,则a或b是最大公约数。4、如果a=b,则继续从1开始执行。5、也就是说循环的判断条件为a=b ,直到a=b时,循环结束。举例说明:a=28,b=21。a>b。则a=a-b=28-...

c语言怎样算两个数的最大公约数。
include <stdio.h> int GCD(int a,int b)\/\/定义函数,用来计算最大公约数 { return b==0?a:GCD(b,a%b);\/\/此处使用了递归,如果b=0,返回a为最大公约数,否则,一直以b与a%b赋给函数,实现辗转相除 } int main(){ int a, b ; \/\/定义实参a, b int answer ; \/\/定义最后结果 s...

求两个数的最大公约数c语言
用c语言求两个数的最大公约数代码如下:1、#include int maininti,a,b,t;scanf(%d%d,&a,&b);输入数a,bifa>b比较a,b大小,如果a>b则交换,结果为a{t=a;a=b;b=t;fori=a;i>=2。2、以较小的a为基数,每内次i减小1循环求最大公容约数ifa%i==0&&b%i==0如果两数均能整除...

c语言怎么求两个整数的最大公约数?
3、假如a = b,则 a或 b是最大公约数;4、如果a != b;则继续从一开始执行;5、也就是说循环的判断条件为a != b,直到a = b时,循环结束。代码如下:define _CRT_SECURE_NO_WARNINGS 1 include <stdio.h> int main(){ int a = 0;int b = 0;printf("输入两个数求最大公约数:"...

c语言如何求两个数的最大公约数?
include <stdio.h> int main(){ int m,n,c,d,t;printf("请输入两个数:\\n");scanf("%d%d",&m,&n);if(m<n){ t=m;m=n;n=t;} d=m*n;c=m%n;while(c!=0){ m=n;n=c;c=m%n;} printf("最大公约数是:\\n%d\\n",n);printf("最小公倍数是:\\n%d\\n",d\/n);} ...

c语言求两个数的最大公约数
algorithm)乃求两个正整数之最大公因子的算法。原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。参考代码:include <stdio.h> int main(){ int x,y,z;scanf("%d%d",&x,&y);while(x!=0){ z=x%y;x=y;y=z;} printf("%d\\n",z);return 0;} \/ 运行结果:6...

相似回答