C ++计算数字的素因子并打印它们

时间:2016-02-10 01:32:31

标签: c++

我想问用户一个整数,并打印素因子。 示例:用户输入100,程序显示2 2 5 5

到目前为止,我有以下内容:

#include <iostream>

using namespace std;

void factors(int n){

int z = 2;

while (z * z <= n)
{
    if (n % z == 0)
    {   
        cout << z;
        n = (n / z);
    }
    else
    {
        z++;
    }
}
if (n > 1)
    {cout << n << "\n";}
}
int main()
{

int x;

cout << "Input positive integer greater than 1: ";

cin >> x;

factors(x);
cout << "The result: " << x;
return 0;}

我的问题是如何让我的主要功能与因子程序进行通信。我运行程序,我收到要求输入的消息,我输入12,我得到消息“结果”但是数字为25,还有12,用户输入的数字。这就像程序正在避免我的因素(int n)程序。请帮助语法?!?

我的问题是我认为的语法。 因为我找到了以下函数来帮助列出素因子: Finding prime factors -user44810

define factors(n)

z = 2

while (z * z <= n)

    if (n % z == 0)
        output z
        n /= z

    else
        z++

if n > 1
    output n

谢谢!!!

2 个答案:

答案 0 :(得分:1)

试试这个

#include <iostream>
#include <vector>

using namespace std;

vector<int> factors(int n){

vector<int> result;
int z = 2;

while (z * z <= n)
{
    if (n % z == 0)
    {   
        result.push_back(z);
        n = (n / z);
    }
    else
    {
        z++;
    }
}
if (n > 1)
    result.push_back(z);
return result;
}

int main()
{

int x;

cout << "Input positive integer greater than 1: ";

cin >> x;

vector<int> result_factors = factors(x);
cout << "The result: ";
for (int i: result_factors)
  cout << "i  ";
cout << endl;

return 0;
}

我更改了您的factor()函数,以便在cout上输出任何内容,但将因子保存在向量中并将其返回。在main函数中,迭代结果向量并将值打印到cout

答案 1 :(得分:0)

所以最大的问题是你的因子函数末尾有一个缺失的括号。你需要在if(n&gt; 1)括号后添加另一个大括号。此外,在最后一个cout的末尾有一个丢失的分号会引发错误。

另一个阻止代码运行的问题是,当你打印&#34;结果:&#34; &LT;&LT; x您将给出与用户输入相同的值。

如果您希望main函数在该点打印出因子()的结果,那么该函数需要返回数据而不是打印它。要解决此问题,可以使用因子函数返回包含所需输出的字符串:

//return a string with the output
string factors(int n){

//create a string to save the output to
string factorlist = "";
int z = 2;

while (z * z <= n)
{
    if (n % z == 0)
    {   
        //append z to the end of the string and add a space to make it easier to read
        factorlist+=to_string(z)+" ";
        n = (n / z);
    }
    else
    {
        z++;
    }
}
if (n > 1)
{
//append n to the end of the string and add a newline
factorlist+=to_string(n)+"\n";
}
//output the string factorlist to wherever the function was called from
return factorlist;
}

然后在看起来像这样的行:

factors(x);
cout << "The result: " << x

应该是:

cout << "The result: " << factors(x);

目前,您只是打印出用户输入的x值。如果你想保存因子(x)的值,你需要设置一个等于它的变量:

string FactorsResult = factors(x)

然后打印出来;或者,如上面的更正代码,只需将其直接打印在cout语句中。