我必须编写一个程序来查找数字的素数因子分解。例如,如果数字 3960 ,则素数因子为 11 5 3 3 2 2 2 。当我运行程序时,这不是你得到的输出。我的代码出了什么问题?感谢。
#include <iostream>
#include <stdio.h>
using namespace std;
#include "Stack.h"
int main()
{
int i;
int n;
int d;
Stack s;
cout << "Stack created. Empty? " << boolalpha << s.empty() << endl;
int num;
int div;
cout<<"Enter a number to know its prime factor: "<<endl;
cin >> num;
cout << "\nThe prime factors of "<<num<<" are: \n\n" << endl;
div = 2;
while(num!=0){
if(num%div!=0)
div = div + 1;
else {
num = num / div;
s.push(div);
if(num==1)
break;
}
s.display(cout);
}
}
答案 0 :(得分:0)
您正在计算循环中打印堆栈。对s.display(cout)
的调用需要放在一个大括号范围之外。
您的代码如下所示:
while(num!=0){
if(num%div!=0)
div = div + 1;
else {
num = num / div;
s.push(div);
if(num==1)
break;
}
s.display(cout);
}
Yuch!正确格式化它是:
while(num!=0){
if(num%div!=0)
div = div + 1;
else {
num = num / div;
s.push(div);
if(num==1)
break;
}
s.display(cout);
}
这显然不是你想要的。你想要:
while(num!=0){
if(num%div!=0)
div = div + 1;
else {
num = num / div;
s.push(div);
if(num==1)
break;
}
}
s.display(cout);
这有望教你正确缩进代码。
我们不知道你的Stack
类是什么,但是这段代码肯定会正确地提取素因子而只打印一次!
我也不确定你为什么在这里使用自己的堆栈类。你可以很好地使用std::vector
。像这样:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> stack;
int num;
int div;
std::cout << "Enter a number to know its prime factor: ";
std::cin >> num;
std::cout << "\nThe prime factors of " << num << " are: \n\n" << std::endl;
div = 2;
while (num > 1){
if (num%div != 0)
div++;
else {
num /= div;
stack.push_back(div);
}
}
for (std::vector<int>::const_iterator iter = stack.begin(); iter != stack.end(); ++iter)
std::cout << *iter << ' ';
std::cout << std::endl;
}