접두사 계산

접두사 계산
시간 제한:
1000 ms  |  메모리 제한:
65535 KB
난이도:
3
묘사 하 다.
먼저 접미사 식 이 무엇 인지 설명해 주세요.
예 를 들 어 2 + (3 + 4) * 5 와 같은 우리 가 가장 흔히 볼 수 있 는 식 은 접미사 식 이다.
그리고 접미사 식 을 연산 순서에 괄호 를 넣 으 면: (2 + (3 + 4) * 5)
그리고 괄호 앞 에 연산 자 를 쓰 면 + (2 * (+ (3 4) 5)
괄호 빼 면: + 2 * + 3, 4, 5
마지막 으로 이 식 은 이 표현 식 의 접두사 표시 입 니 다.
접두사 표현 식 을 드 리 겠 습 니 다. 접두사 값 을 계산 하 십시오.
예 를 들 면:
+ 2 * + 3, 4, 5 의 값 은 37 입 니 다.
입력
여러 조 의 테스트 데이터 가 있 고 각 조 의 테스트 데 이 터 는 한 줄 을 차지 하 며 임 의 두 조작 자 사이 에 임 의 두 조작 수 사이 에 조작 수 와 조작 자 사이 에 모두 빈 칸 이 있다.입력 한 두 조작 수 는 소수 일 수 있 습 니 다. 데 이 터 는 입력 한 수 는 모두 양수 이 고 모두 10 보다 적 으 며 조작 수 는 500 을 초과 하지 않 습 니 다.
EOF 를 입력 으로 끝 나 는 표지 입 니 다.
출력
각 그룹의 데이터 에 대해 이 접두사 표현 식 의 값 을 출력 합 니 다.출력 결 과 는 두 개의 소 수 를 유지 합 니 다.
샘플 입력
+ 2 * + 3 4 5
+ 5.1 / 3 7

샘플 출력
37.00
5.53
#include<stdio.h>  
#include<string.h>  
#include<stdlib.h>
int i,len;  
char a[1000];  
double f()  
{  
    double sum=0;  
    int n;  
    switch(a[i])  
    {  
    case '+':i++;return f() + f();    
    case '-':i++;return f() - f();    
    case '*':i++;return f() * f();    
    case '/':i++;return f() / f();    
    case ' ':i++;return f();    
    default:    
        sscanf(&a[i],"%lf%n",&sum,&n);    
        i+=n;return sum;    
  
    }  
}  
int main()  
{  
    while(gets(a))  
    {  
        len=strlen(a);  
        i=0;  
        printf("%.2lf
",f());             memset(a,0,sizeof(a));        }     system("pause");       return 0;   }          

좋은 웹페이지 즐겨찾기