표현 식 값 구하 기 (() 형식의 기본 +, -, *, /, ^)
3256 단어 데이터 구조 스 택
표현 식 으로 한 줄 만 입력 하 십시오.
출력 은 한 줄 에 불과 합 니 다. 표현 식 으로 계 산 된 결 과 는 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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PHP SPL 표준 라 이브 러 리 의 데이터 구조 스 택(SplStack)소개스 택(Stack)은 선형 표 의 한 끝 에 만 요 소 를 삽입 하거나 삭제 할 수 있 기 때문에 특수 한 선형 표 입 니 다. SplStack 은 더 블 링크( )를 계승 하여 스 택 을 실현 하 는 것 이다. 클...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.