为什么这个堆栈不能正确显示?

时间:2014-03-27 19:15:38

标签: c++

我必须编写一个程序来查找数字的素数因子分解。例如,如果数字 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);

    }
}

1 个答案:

答案 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;
}