找出最大公约数的程序

Program to find greatest common divisor

本文关键字:程序 最大公约数      更新时间:2023-10-16

这是我为上面的问题写的一个c++程序。我们的老师告诉我们要使用for循环。

void main()
int A[30],B[30],m,n,i,j,x,z;
cout<< "enter two numbers";
cin>>m>>n;
for(i=1,j=0;i<=m,j<30;i++,j++)
{
  if(m%i==0)
   { A[j]=i;
     z=j;
   }
}
for(i=1,j=0;i<=n,j<30;i++,j++)
{ 
  if(n%i==0)
  { B[j]=i;
    x=j;
  }
}
for(i=z;i>=0;--i)
{
  for(j=x;j>=0;--j)
    {
    if(A[i]==B[j])
      { cout<<"gcd="<<A[i];
      }
    }
}
}

输出显示"输入两个数字:"当我输入15和3时,我得到的结果是一个闪烁的光标。通过这个程序,我意识到每个数字的除数在存储在A和B数组中时不是连续存储的,或者之间有间隙。如果内存中没有A[11]的任何内容,那么当您将它与另一个带有数字的变量进行检查时会发生什么?有人可以修改这使它工作,并告诉我什么是错的吗?我是编程新手,所以请原谅我的程序很笨拙。

Andreas指出,还有其他方法可以实现找到gcd的目标,但是练习的重点是更好地处理一些基本的编程结构。所以让我们用你的方法。

你的想法是计算两个除数列表,然后比较它们。就像你说的,有一个空白的列表会让这变得更难。

所以调整你的循环,只增加存储索引当你存储了东西

for(i=1,j=0;i<=m && j<30;i++) // need the && here; a comma means something different
{
  if(m%i==0)
   { A[j++]=i;
     z=j;
   }
}

第二,你有一个错别字,你没有存储在B中,所以修复

for(i=1,j=0;i<=n && j<30;i++)
{ 
  if(n%i==0)
  { B[j++]=i; //B here not A
    x=j;
  }
}

那应该有帮助。

试试这个:

int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

摘自:https://codereview.stackexchange.com/questions/66711/greatest-common-divisor