为什么我写的这个求最大公约的是程序不能稳定运行
求最大公约数,要求输入两个数,但有的可以正常运行,有的不行。不如24 56,这组求出来的最大公约数是1 #include<stdio.h>int main()
{
int a,b,n,max;
scanf("%d %d",&a,&b);
if(a*b==0&&a!=b)//如果a,b其中一个为0,则最大公因数为较大的一个
{
if(a>b)
{
max=a;
}
else
{
max=b;
}
}
else if(a*b!=0&&a>b)//如果a,b均不为0 ,这里是a>b,下面一个else是a<b
{
for(n=1;n<=b;n++)//寻找公因数
{
if(a%n==0&&b%n==0)
max=n;//把较大的一个公因数赋值给max
}
}
else if(a*b!=0&&b>a)
{
for(n=a;n<=a;n++)
{
if(a%n==0&&b%n==0)
max=n;
}
}
else//这里是ab相等
{
max=a;
}
printf("%d\n",max);
return 0;
} 本帖最后由 jackz007 于 2019-11-8 21:51 编辑
试试我写的用辗转相除法计算最大公约数的代码,如果返回值是 1,那就说明两个数没有最大公约数。
int gcd(int x , int y)
{
int t , ret = 0 ;
if(x > 0 && y > 0) {
while(y > 0) {
t = x % y ;
x = y ;
y = t ;
}
ret = x ;
}
return ret ;
} jackz007 发表于 2019-11-8 21:21
试试我写的用辗转相除法计算最大公约数的代码,如果返回值是 1,那就说明两个数没有最大公约数。
呃呃,你这个我编译的时候报错 zmLau0727 发表于 2019-11-8 21:28
呃呃,你这个我编译的时候报错
把报错信息贴出来看看 jackz007 发表于 2019-11-8 21:35
把报错信息贴出来看看
这样的 本帖最后由 jackz007 于 2019-11-8 21:50 编辑
我只是给你写了计算最大公约数的 gcd() 函数,需要复制到你的程序里,由你来调用。
下面是我写的完整代码,现在再编译试试看。
#include <stdio.h>
int gcd(int x , int y)
{
int t , ret = 0 ;
if(x > 0 && y > 0) {
while(y > 0) {
t = x % y ;
x = y ;
y = t ;
}
ret = x ;
}
return ret ;
}
int main(void)
{
int k , m , n ;
printf("\t请输入 m n : ") ;
scanf("%d%d" , & m , & n) ;
if((k = gcd(m , n)) > 1) printf("\t最大公约数是:%d\n" , k) ;
else printf("\t没有最大公约数\n") ;
return 0 ;
}试试这个,完整代码:
jackz007 发表于 2019-11-8 21:47
我只是给你写了计算最大公约数的 gcd() 函数,需要复制到你的程序里,由你来调用。
下面是 ...
这个可以运行,可是我写的那个哪里有错啊
zmLau0727 发表于 2019-11-8 21:52
这个可以运行,可是我写的那个哪里有错啊
噢噢,我还没学到函数, jackz007 发表于 2019-11-8 21:47
我只是给你写了计算最大公约数的 gcd() 函数,需要复制到你的程序里,由你来调用。
下面是 ...
噢噢,我还没学到函数 zmLau0727 发表于 2019-11-8 21:54
噢噢,我还没学到函数
你用的是什么算法,完全搞不懂,没法帮你找问题,倒是按辗转相除法帮你修改了代码,你再试试看吧:
#include<stdio.h>
int main()
{
int a , b , n , max = 0 ;
scanf("%d%d", & a , & b);
if(a > 0 && b > 0) {
while(b) {
n = a % b ;
a = b ;
b = n ;
}
max = a ;
}
printf("%d\n" , max) ;
return 0 ;
} 手边没电脑,读了遍程序,看到一处笔误,b>a情形下的for循环是从n=a开始的,其他没看出来 程序呢? 倒戈卸甲 发表于 2019-11-8 22:21
手边没电脑,读了遍程序,看到一处笔误,b>a情形下的for循环是从n=a开始的,其他没看出来
噢噢,确实有个笔误的问题,之前我想要break,没写条件,现在问题已经解决了
页:
[1]