我想问用户一个整数,并打印素因子。 示例:用户输入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
谢谢!!!
答案 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语句中。