最大公因数函数
greatest common factor function
我正在尝试解决这个挑战问题,我打算通过引用一个函数来找到两个输入数字的GCD。但是,我不确定我到底在哪里搞砸了。以下是供参考的确切问题:
编写一个函数,该函数接受 x 和 y 作为输入参数,并计算并返回这两个值的最大公分母。
我尝试创建一个函数来查找 GCD,然后稍后只引用该函数。我不确定我做错了什么。
#include <iomanip>
using namespace std;
int gcd;
cout << "Enter a valid integer: ";
cin >> n >> m;
int digit = number(n, m);
return 0;
}
int number(int n, int m){
for (int i=1; i<=n; ++i){
int gcd = i;
if(n%i==0 && m%i==0) {
break;
}
return gcd;
}
}
我应该得到这个:输入两个整数:12 812 和 8 的 GCD 是 4。
但是相反,我收到一个错误,没有在这个范围内声明 gcd,这没有意义,因为我在函数内部和外部都将其声明为 int。
有很好的递归算法,但由于不允许使用它们,我清理了您的实现:
- 将有故障的 iomanip 替换为 iostream 将输入提示从"输入一个整数">
- 更改为"输入两个整数">
- 从您的主目录中删除了 i,您不需要它
- 将主变量替换为 gcd
- 添加了一个 cout 以在您的主目录中显示结果
- 使用您的gcd函数,我重写了它,只保留了您的中断条件
- 匹配中断条件的循环必须是从适当数字开始的倒计时(即 min(m, n( 应该是初始值,我们向后循环直到达到 1(。
#include <iostream>
using namespace std;
int gcdfunction(int n, int m);
int main() {
int n, m;
cout << "Enter two integers: ";
cin >> n >> m;
int gcd = gcdfunction(n, m);
cout << "GCD: " << gcd << "n";
return 0;
}
int gcdfunction(int n, int m){
for (int i = m<=n ? m:n ; i > 1; i--) {
if (n%i==0 && m%i==0) return i;
}
return 1;
}
简单的递归解决方案...试试这个。
int gcd(int a, int b)
{
if(b==0)
return a;
else
gcd(b, a%b);
}
无需递归即可实现相同的目标 -
int gcd(int a, int b)
{
while(b!=0)
{
int tmp = a;
a = b;
b = tmp % b;
{
return a;
}
现在的主要功能..
#include<iostream>
using namespace std;
int main()
{
int a,b;
cout<<"Enter two number: ";
cin>>a>>b;
cout<<"GCD of two number: "<<gcd(a,b)<<endl;
}
我希望你正在寻找这样的东西
#include <stdio.h>
int hcf(int, int); //function declaration
int main()
{
int a, b, result;
printf(“Enter the two numbers to find their HCF: “);
scanf(“%d%d”, &a, &b);
result = hcf(a, b);
printf(“The HCF of %d and %d is %d.n”, a, b, result);
return 0;
}
int hcf(int a, int b)
{
while (a != b)
{
if (a > b)
{
a = a – b;
}
else
{
b = b – a;
}
}
return a;
}
简单的程序,易于理解。
您的函数需要稍作调整才能正常工作。
-
gcd
必须在for
循环之外定义,以便可以将其用作返回值。 - 在
for
循环中,在if
语句中使用break
在逻辑上是不正确的。如果你这样做,你将永远得到1作为你的答案。除所有值外,对于n
和m
的所有值,n % 1
和m % 1
将为零。
这是在我的测试中有效的更新版本。
int gcdfunction(int n, int m){
int gcd = 1;
for (int i=1; i<=n; ++i){
if(n%i==0 && m%i==0) {
gcd = i;
}
}
return gcd;
}
请注意,欧几里得算法可能是计算两个数字的 GCD 的最有效算法。
欧几里得算法也可以使用非递归函数轻松实现。
int gcdfunction(int n, int m){
// Make sure n is the smaller of the numbers.
if ( n > m )
{
std::swap(n, m);
}
while ( m % n != 0 )
{
int next = m % n;
m = n;
n = next;
}
return n;
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 查找 n 个数字的公因数数(不包括"1"作为公因数)
- 最大公因数函数
- 用于检查使用大数字 C++ 时返回返回 0 的最大素因数的函数
- RSA函数生成的公钥(e)始终为17
- 2个数字的公因数是什么
- 如何用c++求公因数
- 有一种方法可以使用默认的复制构造函数声明复制构造函数非公共和?