Limitation in execution of the prefix expression

Hey, I initiated the following code:

#include <iostream.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <conio.h>
#include <string.h>
const int MAX = 100 ;
class prefix
{
private :

	int stack[MAX] ;
	int top, nn ;
	char *s ;
public :
	prefix( ) ;
	void setexpr ( char *str ) ;
	void push ( int item ) ;
	int pop( ) ;
	void calculate( ) ;
	void show( ) ;

} ;
prefix :: prefix( )
{
top = -1 ;
}
void prefix :: setexpr ( char *str )
{
s = str ;
}
void prefix :: push ( int item )
{
if ( top == MAX - 1 )
cout << endl << “Stack is full.” ;
else
{
top++ ;
stack[top] = item ;
}
}
int prefix :: pop( )
{
if ( top == -1 )
{
cout << endl << “Stack is empty.” ;
return NULL ;
}
int data = stack[top] ;
top-- ;
return data ;
}
void prefix :: calculate( )
{
long n1, n2, n3 ;
while ( *s )
{
if ( *s == ’ ’ )
{
s++ ;
continue ;
}
if ( isdigit ( *s ) )
{
nn = *s - ‘0’ ;
push ( nn ) ;
}
else
{
n1 = pop( ) ;
n2 = pop( ) ;
switch ( s )
{
case ‘+’ :
n3 = n2 + n1 ;
break ;
case ‘-’ :
n3 = n2 - n1 ;
break ;
case ‘/’ :
n3 = n2 / n1 ;
break ;
case '
’ :
n3 = n2 * n1 ;
break ;
case ‘^’ :
n3 = pow ( n2 , n1 ) ;
break ;
default :
cout << “Unknown operator” ;
exit ( 1 ) ;
}

		push ( n3 ) ;
	}
	s++ ;
}

}
void prefix :: show( )
{
nn = pop ( ) ;
cout << "Result is: " << nn ;
}

void main( )
{
char expr[MAX] ;
clrscr();
cout << "\nEnter prefix expression to be evaluated : " ;
cin.getline ( expr, MAX ) ;
strrev(expr);
prefix q ;
q.setexpr ( expr ) ;
q.calculate( ) ;
q.show( ) ;
getch();
}

Now the problem is that the program is running for single digit numbers, but not for multiple ones.
Please help.