stack.h源文件: #include <math.h> #include <iostream.h> const int maxentry=20; enum error_code{fail,success,overflow,underflow}; template<class type> class stack { private: int count; type entry[maxentry]; public: stack() {count=0;} error_code push(const type &a); error_code pop(); bool empty()const; error_code top(type &a)const; int numbers(); }; template<class type> error_code stack<type>::push(const type &a) { error_code outcome=success; if(count<maxentry) { entry[count++]=a; } else outcome=fail; return outcome; } template<class type> error_code stack<type>::pop() { error_code outcome=success; if(count>0) { count--; } else outcome=fail; return outcome; } template<class type> bool stack<type>::empty() const { return count==0; } template<class type> error_code stack<type>::top(type &a) const { error_code outcome=success; if(count>0) { a=entry[count-1]; } else outcome=fail; return outcome; } template<class type> int stack<type>::numbers() { return count; } bool isprime(int n) { if (n==1) return false; int k; k=sqrt(n); for (int i=2;i<=k;i++) { if (n%i==0) {return false;} if (i>=k+1) {return true;} else {return false;} } }
void prime(stack<int> num) { int m=2; //int a[255]={0,}; //int i; int n; num.top(n); //num.pop(); //cout<<n<<endl; if (n==1||n==0||n<0) {cout<<"您所输入的数没有素因子。"<<endl;return;} while (n>1) { loop1:{ if (isprime(n)) {goto loop2;} else if (n%m==0) { //cout<<num.top()<<endl; num.pop(); n=n/m; num.push(m); if (n!=1) num.push(n); goto loop1; } else m++; if (!isprime(m)) m++; else goto loop1; } } /*if (num.top(i)==1) num.pop();*/ loop2:{ int x=num.numbers(); for (int j=0;j<=x-1;j++) { int m; num.top(m); cout<<m<<" "; num.pop(); } cout<<endl; } } prime.cpp: #include <iostream> using namespace std; #include "stack.h" #include <math.h> void prime(stack<int>); bool isprime(int); void main() { stack<int> num; int n; char s; loop1:{cout<<"Input a Number:"<<endl; cin>>n; cout<<"The prime of the number is:"<<endl; //cout<<isprime(n)<<endl;
num.push(n); prime(num);} cout<<"是否继续?"<<endl; cin>>s; if (s=='y') {num.pop(); goto loop1;} else return; } 
|