找出最大公约数的程序
Program to find greatest common divisor
这是我为上面的问题写的一个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
相关文章:
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- async_write完成处理程序最早何时完成?
- 多线程 gtkmm 应用程序最简单的示例
- 最大化双分区的 GCD(最大公约数)之和?
- 应用程序最小化时单击显示桌面/最小化全部
- 最大公因数函数
- 为什么我的程序最多只能编译 16 条记录
- 多项式最大公约数C++
- 实现欧几里得除法,根据两个正整数的线性组合编写这两个正整数的最大公约数
- 使用数组的 2 个数字的最大公约数
- 在编译时找到最大公约数
- C++最大公约数循环
- 直到n的所有数的最大公约数与n的和
- 当程序最小化时位图消失
- c++程序计算最大公约数
- 使用欧几里得算法识别两个值的最大公约数 (GCD)
- 找出最大公约数的程序
- 为什么当我的应用程序最小化时CPU使用率会增加