atof() 함수 상세---NOI2.2 기본 알고리즘의 귀속과 자체 호출 함수 역 폴란드 표현식 분석
6763 단어 NOI 사이트 문제 해결차례로 미루다
총 시간 제한:
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());
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NOIp2017 그룹 Day1T2 시간 복잡성 향상이것은 매우 짜증나는 시뮬레이션 문제다. F i x y ****** E 새 변수를 나타내는 F i x y i는 다 수정돼요. 입력 출력 형식 F i x y 및 E는 시간의 복잡도를 계산할 수 있다. F i x...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.