我想打开说我还不是很擅长编程,而且可能有更好的方法来做我想做的事情。如果看到那些如此肆无忌惮的事情会让你烦恼,那就继续吧。
我一直在为Euler项目提出第三个问题,即“找到最大的主要因素600851475143”。首先,我做了一些计算数字因子的东西。 (请原谅这些名字,我什么都想不到。)
#include <iostream>
using namespace std;
void Factor (double dFactorer)
{
long dUpperlimit;
dUpperlimit = (int)dFactorer/2;
float fnumTouse;
fnumTouse = 1;
int nCounter;
nCounter = 0;
while (fnumTouse <= dUpperlimit)
{
if ((long)dFactorer % (long)fnumTouse == 0)
{
cout << fnumTouse << endl;
fnumTouse++;
nCounter++;
}
else
{
fnumTouse++;
}
}
cout << dFactorer << endl;
cout << "There are " << nCounter + 1 << " factors in this number";
}
int main()
{
double dNumtofac;
cout << "Enter a number to factor: ";
cin >> dNumtofac;
cout << endl;
Factor (dNumtofac);
return 0;
}
好吧,所以,我知道这是一个非常粗暴的工作,我必须做的所有演员才能让某些事情发挥作用。它适用于较小的数字,但是在1亿左右的任何数字都会使它在完全停止之前仅输出一定数量的因子。我尝试了问题编号,它的输出是数字本身,说这个600851475143中只有一个因素。我想知道它为什么说这个,是否与我使用的变量限制有关?别的什么?我没有足够的知识来解决这个问题。
答案 0 :(得分:0)
#include <iostream>
using namespace std;
int main()
{
long long n=0;
//to do: verify that the number is positive and below the limit of long long
cout <<"The number to factor : ";
cin >>n;
long long aux = n%2==0 ? 2 : 1;
for (long long i=3;i<=n/2;i+=2)
if(n%i==0)
aux = aux>n/i ? aux : n/i;
cout<<"Greatest factor = "<<aux;
return 0;
}
当然,你可以通过使for从高到低并在第一次出现因子时停止来大大改善这一点。不要忘记验证n / 2是奇数还是偶数。 (没有测试代码)。