This assignment is working with stacks.
The problem posed:
Write a program that uses a stack to print the prime factors of a positive integer in decending order.
My algorithm is:
1. ask for a number
2. push 1 into the stack
3. from divisor = 2 through divisor = number
if number % divisor == 0 && divisor is prime4. if the top item in the stack is 1
push divisor into stack
print number and stack4. ask for another number or quit
otherwise print stack until stack is empty
The code I have so far works except for 3. finding the 'prime' factors. But, I am getting some numbers that aren't prime with my for loop condition and can't figure out a way to get all cases. Is there something very simple that I am missing here? For example 50 gives me 25 as a prime.
As always, your help is most appreciated.Code:#include <iostream> #include <stack> using namespace std; void displayBanner(); void displayQuestion(); int main() { int number, halfNumber; char userResponse; stack<int> smallPrimeFac; displayBanner(); displayQuestion(); cin >> userResponse; while (userResponse == 'Y' || userResponse == 'y') { cout << "Enter the number: "; cin >> number; cout << endl; cout << "\nThe prime factors of " << number << " are: "; smallPrimeFac.push(1); if((number % 2) == 0) smallPrimeFac.push(2); for (int i = 3; i < number - 1; i++) { if((number % i) == 0 && i % 2 != 0 ) smallPrimeFac.push(i); }//end for if (smallPrimeFac.size() == 1) cout << number << " "; while (!smallPrimeFac.empty()) { cout << smallPrimeFac.top() << " "; smallPrimeFac.pop(); }//end print stack while cout << endl; displayQuestion(); cin >> userResponse; }//end while return 0; }//end main void displayBanner() { cout << "\nThis program requests you to input a non-negative number." << "\nIt then calculates all the prime factors of the number," << "\nand prints the factors out in decending order" << endl; } void displayQuestion() { cout << "\nWould you like to enter a number to find it's prime factors?" << "\n\ 'Y' to continue, anything else to quit: "; }



LinkBack URL
About LinkBacks



