首页 > 解决方案 > 为什么即使看起来很合适,它也会显示错误?

问题描述

#include <iostream>
using namespace std;
int factors(int);

int main() {
   int n;
   cout<<"Enter a number: ";
   cin>>n;
   factors(n);
   return 0;
}

factors(int n){
    //To find out factors
    int i, arrA[5];
    arrA[0]=1;
    cout<<"Factors: ";
    for(int i=1;i<=n;i++){
        for(int j=2;j<=n;j++){
            if(n%j==0){
                arrA[i]=j;
            }
            else if(n%j!=0){
                i--;
            }
        }
    }
    for(int z=0;z < (sizeof(arrA)/sizeof(arrA[0]));z++){
        cout<<arrA[z]<<" ";
    }
}

这是一个 c++ 代码,用于查找给定数字的因数。但问题是它没有产生所需的输出。问题在于处理部分(我认为)。它仅显示“因素:”并继续处理并给出错误说明 - “Untitled.exe 已停止工作”。请修复错误并提供详细说明。

标签: c++

解决方案


很明显,问题来自for(int i=1;i<=n;i++){包含i--无限循环的风险。

由于您标记了 c++,因此使用 c++ 来避免静态数组(如果您确定只有 5 个因素,arrA[5] 是一件好事,但这取决于您的 n)

而是使用 std::list

#include <iostream>
#include <list>
using namespace std;
void factors(int n, std::list<int> & factors);

int main() {
   int n;
   cout<<"Enter a number: ";
   cin>>n;
   std::list<int> fact;

   factors(n, fact);

   cout<<"Factors: ";
   std::list<int>::iterator it=fact.begin();
   for(;it!=fact.end();it++)
   {
       std::cout << *it<<", ";
   }
   return 0;
}

void factors(int n, std::list<int> & factors)
{
    for(int j=2;j<=n;j++){
            if(n%j==0){
                factors.push_back(j);
            }
    }
}

推荐阅读