我正在尝试解决这个挑战性问题,即我要通过引用一个函数来找到两个输入数字的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 8 12和8的GCD为4。
但是,相反,我在此范围内未声明gcd时遇到错误,这没有意义,因为我在函数内部和外部都将其声明为int。
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}
答案 2 :(得分:0)
我希望您正在寻找类似的东西
#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;
}
简单的程序,易于理解。
答案 3 :(得分:0)
您的功能需要一些调整才能正常工作。
gcd
必须在for
循环之外定义,以便可以将其用作返回值。for
循环中,在break
语句中使用if
在逻辑上是错误的。如果这样做,您将始终得到1作为答案。毕竟,n % 1
和m % 1
的所有值的n
和m
将为零。这是可以在我的测试中使用的更新版本。
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;
}
请注意,the Euclidean algorithm可能是计算两个数字的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;
}