atof() 함수 상세---NOI2.2 기본 알고리즘의 귀속과 자체 호출 함수 역 폴란드 표현식 분석

1. 제목 설명
총 시간 제한:
1000ms 
메모리 제한:
65536kB
묘사
역폴란드 표현식은 연산자를 선행시키는 산술 표현식이다. 예를 들어 일반적인 표현식 2+3의 역폴란드 표현법은 +23이다.역폴란드 표현식의 장점은 연산자 간에 우선순위 관계가 있을 필요도 없고 괄호로 연산 순서를 바꿀 필요도 없다는 것이다. 예를 들어 (2+3)*4의 역폴란드 표현법은 *+234이다.이 문제는 역폴란드 표현식의 값을 풀는데 연산자는 +-*/네 개를 포함한다.
입력
입력은 한 줄로 되어 있으며, 그 중에서 연산자와 연산수 사이는 모두 빈칸으로 구분되며, 연산수는 부동점수이다.
출력
한 줄, 표현식의 값으로 출력합니다.
직접 사용 가능
printf("%f", v)
출력 표현식의 값 v.
샘플 입력
* + 11.0 12.0 + 24.0 35.0

샘플 출력
1357.000000

힌트
atof (str) 를 사용하여 문자열을 더블 형식의 부동 소수점으로 변환할 수 있습니다.atof는 math에 정의되어 있습니다.h중.
2. 제목 분석
이 문제는 귀속 문제로 함수를 통해 해결할 수 있으며 매번 귀속을 입력할 수 있습니다.
double f(){
scanf("%s",a);
}
scanf('%s', a)는 빈칸을 만나면 입력을 멈추기 때문에if문장으로 연산자인지 부동점수인지 판단할 수 있습니다.
char a[55];
double f(){
scanf("%s",a);
if(a[0]==‘+’) ...
if(a[0]==‘-’) ...
if(a[0]==‘*’) ...
if(a[0]==‘/’) ...
else ...
}
앞의 4개의 if는 모두 처리하기 쉽다
if(a[0]==‘+’) return f()+f();
if(a[0]==‘-’)  return f()-f();
if(a[0]==‘*’)  return f()*f();
if(a[0]==‘/’)  return f()/f();
마지막else는 부동점수의 상황으로atof() 함수가 크게 등장했다.
else return atof(a);
atof () 함수는 많은 절차를 간소화하여 필요할 때atof를 사용하여 프로그램을 간소화할 수 있습니다.
코드:
#include
#include
#include
char a[105];
double v(){
	scanf("%s",a);
	if(a[0]=='\0') return 0;
	else if(a[0]=='+') return v()+v();
	else if(a[0]=='-') return v()-v();
	else if(a[0]=='*') return v()*v();
	else if(a[0]=='/') return v()/v();
	else return atof(a);
}
int main()
{
	printf("%f",v());
}

좋은 웹페이지 즐겨찾기