【问题标题】:Using array to find HCF, getting unknown output (C++)使用数组查找 HCF,得到未知输出(C++)
【发布时间】:2017-11-30 03:33:10
【问题描述】:

所以无论我输入什么,我最后一次输出时都会得到结果 176。
我的逻辑是我可以制作一个 Array(comfactors) 并将公共因子放入其中。之后,我取最大的数字并将其放入 comfactors[0] 并输出。
如果其他人有任何其他建议,请告诉。一直在寻找学习。

#include <iostream>
using namespace std;
typedef int integer;
void generate_factors(integer factor1[], int a, integer factor2[], int b);
void findHCF(int[], int[], int, int);
int main()
{
int x, y;

cout << "Enter first integer: " << endl;
cin >> x;

cout << "Enter second integer: " << endl;
cin >> y;



integer *integerArray1 = new integer[x], *integerArray2 = new integer[y];

generate_factors(integerArray1, x, integerArray2, y);
findHCF(integerArray1, integerArray2, x, y);

return 0;
}

void generate_factors(integer factor1[], int a, integer factor2[], int b)
{
int i, j;
cout << "\n" << endl;
cout << "Factors of " << a << " are: " << endl;
for (i = 1; i <= a; i++)
{
    if ((a%i) == 0)
    {
        factor1[i - 1] = i;
        cout << factor1[i - 1] << " ";
    }

}

cout << "\n" << endl;

cout << "Factors of " << b << " are: " << endl;
for (j = 1; j <= b; j++)
{
    if ((b%j) == 0)
    {
        factor2[j - 1] = j;
        cout << factor2[j - 1] << " ";
    }

}


}

void findHCF(integer Array1[], integer Array2[], int a, int b)
{
int i, j, k;
int comfactors[1024];

for (i = 0; i <= a; i++) 
{
    for(j = 0; j <= b; j++)
    {

        if (Array1[j] == Array2[i]) 
        {
            comfactors[i] = i;
        }

    }

}


for (k = 0;k < a+b; ++k)
{
    if (comfactors[0] < comfactors[k])
    {
    comfactors[0] = comfactors[k];}
}
cout << "\n\nThe Highest Common Factor is " << comfactors[0];
}

【问题讨论】:

  • integerArray1 未初始化。 generate_factors 分配了它的一些元素,但不是全部;其余的包含随机垃圾。当然,integerArray2 也一样。但是findHCF 会查看所有元素,无论是初始化的还是未初始化的。您的程序表现出未定义的行为。
  • 此外,findHCF 混淆了哪个边界与哪个数组,因此它也可能执行缓冲区溢出。
  • intergerArray1 在得到用户输入后初始化
  • 指针本身被初始化,通过使其指向一个初始化的内存块。该块的内容然后在点中初始化,但其中大部分仍然是垃圾。

标签: c++ arrays sorting


【解决方案1】:

你得到了错误的答案,因为这里你的数组在随机点充满了垃圾值, 例如,在您的函数generate_factors 中,仅填充满足条件的那些点。因此,当您在 functionfindHCF 中搜索公共值时,这些垃圾值会出现并导致出现意外输出。 所以你应该用 1 初始化数组

虽然计算两个数字的 HCF 的一种简单方法是使用 Euclid's Algorithm

这是欧几里得算法在 C++ 中的一个实现:

int hcf(int a, int b) {
   if (b == 0) {
      return a;
   } else {
      return hcf(b, a % b);
   }
}

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多