표현 식 값 구하 기 (() 형식의 기본 +, -, *, /, ^)

제목 설명 은 표현 식 을 보 여 줍 니 다. 그 중에서 연산 자 는 +, -, *, /, ^ 표현 식 의 최종 값 을 구 해 야 합 니 다. "/" 는 최종 결 과 를 정수 로 정리 하기 위해 데 이 터 는 높 은 정밀도 가 필요 하지 않 습 니 다!
표현 식 으로 한 줄 만 입력 하 십시오.
출력 은 한 줄 에 불과 합 니 다. 표현 식 으로 계 산 된 결 과 는 maxlongint 보다 작 을 뿐만 아니 라 전체 계산 과정 에서 maxlongint 를 초과 하지 않 습 니 다.
샘플 입력 2 ^ 3 + 1
출력
제시 표현 식 총 길이 < 20
문제 풀이 방향: 1. 숫자 와 기 호 를 각각 배열 에 저장 합 니 다.2. 기 호 를 입력 할 때마다 앞의 모든 현재 기호 우선 순위 보다 작 거나 같은 데 이 터 를 처리 합 니 다.3. 마지막 숫자 를 입력 할 때 뒤에서 존재 하 는 모든 데 이 터 를 처리 합 니 다.
#include
#include
int fun(int a,int b,char c);                    //    
int fun1(char ch);                              //         ,      
int main()
{
    int Judge[5][5] = {{0,0,-1,-1,-1},          //           
                       {0,0,-1,-1,-1},			//    ,        +,-,*,/,^
                       {1,1,0,0,-1},			//1    ,0    ,-1    
                       {1,1,0,0,-1},
                       {1,1,1,1,0}};
    char str[20],type[20];                      //str    ,type    
    int num[20] = {0};                          //num      ,     0,        
    int i,j = 0 , k = 0,len,t;                  //j      ,k      
    int sum;                                    //sum         
    scanf("%s",str);
    len = strlen(str);
    for(i = 0 ; i < len ; i++)
    {
        if(str[i]>='0'&&str[i]<='9')
        {
            num[j] += str[i] - '0';             //           , :11+11, 11          
            if(str[i+1]>='0'&&str[i+1]<='9')  num[j] *= 10;
            else j++;
        }
        else
        {
            while(Judge[fun1(str[i])][fun1(type[k-1])] <= 0&&k-1>=0)    //                      
            {
                k--;                                                    //          
                sum = fun(num[j-2],num[j-1],type[k]);                   //       
                j = j-2;                                                //      
                num[j++] = sum;                                         //          
                num[j] = 0;                                             //    0,               
            }
        }
        if(str[i]'9')  type[k++] = str[i];
        if(i == len-1)
        {
            for(t = k-1 ; t >= 0 ; t--)                                 //          ,                  
            {
                sum = fun(num[t],num[t+1],type[t]);
                num[t] = sum;
            }

        }
    }
    printf("%d
",sum); return 0; } int fun(int a,int b,char c) { int i,sum; if(c=='+') sum = a+b; else if(c=='-') sum = a-b; else if(c=='*') sum = a*b; else if(c=='/') sum = a/b; else if(c=='^') { sum = 1; for(i = 0 ; i < b ; i++) // pow , . :10^2==99 { sum *= a; } } return sum; } int fun1(char ch) { if(ch=='+') return 0; else if(ch=='-') return 1; else if(ch=='*') return 2; else if(ch=='/') return 3; else if(ch=='^') return 4; return 0; }

좋은 웹페이지 즐겨찾기