问题描述
我试图找到给定数字的最大因数很简单,但是为什么我的代码没有给出正确的输出呢?
#include<iostream>
#include<math.h>
#include <bits/stdc++.h>
using namespace std;
int lfactor(int a)
{
int *p;
int s=0;
p=new int[a];
int lf;
for(int i=2;i<a;i++)
{
if(a%2==0)
{
lf=a/2;
cout<<lf;
return 0;
}
else
{
if(a%i==0)
{
p[s]=i;
s++;
}
}
}
cout<<*max_element(p,p+a);
}
int main()
{
int a;
cout<<"Enter Number to calculate largest factor";
cin>>a;
lfactor(a);
}
这段代码为我提供了一些随机输出,正在尝试15689
解决方法
由于从未初始化p
的内容,因此您将获得“随机”输出。您应该做的是这样:
int *p = new int[a] {0}; // fill with zeros
您也永远不会删除此数组,因此会导致内存泄漏。您可以使用std::unique_ptr<int[]>
,而不必担心完全删除它。
完全不必创建此数组。由于您是从最小的数字到最大的数字进行迭代,因此您发现的最新因素也将是最大的。
for(int i = 2; i < a; i++)
{
if (a % i == 0) {
lf = i;
s++;
}
}
还有更多方法可以对此进行优化。例如,如果发现i
是i
的因数,则可以除以a
并以更少的迭代次数开始一个新循环。