求最大公约数的程序
Program to find greatest common divisor
这是我尝试为上述内容编写的 c++ 程序 question.Our 老师告诉我们使用 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] 的任何内容,当您将它与另一个带有数字的变量进行检查时会发生什么?有人可以修改它以使其工作并告诉我哪里出了问题吗?我是编程新手,如果我的程序笨拙,请原谅。
试试这个:
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
摘自此处:https://codereview.stackexchange.com/questions/66711/greatest-common-divisor
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;
}
}
这应该有所帮助。
这是我尝试为上述内容编写的 c++ 程序 question.Our 老师告诉我们使用 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] 的任何内容,当您将它与另一个带有数字的变量进行检查时会发生什么?有人可以修改它以使其工作并告诉我哪里出了问题吗?我是编程新手,如果我的程序笨拙,请原谅。
试试这个:
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
摘自此处:https://codereview.stackexchange.com/questions/66711/greatest-common-divisor
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;
}
}
这应该有所帮助。