À̰÷¿¡¼´Â ÀڷᱸÁ¶¸¦ ÇнÀÇÕ´Ï´Ù.
1. Stack
(ÇÁ·Î±×·¥-1, ¼ö½Ä°è»ê-1)
#include<stdio.h>
#include<string.h>
#include<conio.h>
char a[100], k[100], s[100];
int main()
{
scanf("%s",a);
int i, sp=0, kp=0;
for(i=0; i<=strlen(a); i++){
if(a[i] >= 48 && a[i] <=57){
kp++;
k[kp]=a[i];
}
else{
if(a[i] == '*' || a[i] == '/'){
sp++;
s[sp]=a[i];
}
else if(a[i] == '+' || a[i] == '-'){
if(s[sp] =='*' || s[sp] =='/'){
kp++;
k[kp]=s[sp];
sp--;
}
sp++;
s[sp]=a[i];
}
else if(a[i]=='('){
sp++;
s[sp]=a[i];
}
else if(a[i]==')'){
while(1){
if(s[sp]=='('){
sp--;
break;
}
kp++;
k[kp]=s[sp];
sp--;
}
}
}
}
while(1)
{
kp++;
k[kp]=s[sp];
sp--;
if(sp==0) break;
}
int aa, bb;
sp=0;
for(i=1; i<=kp; i++){
if(k[i]>='0' && k[i]<='9'){
sp++;
s[sp] = k[i];
}
else{
if(k[i]=='*'){
aa = s[sp]-'0'; sp--;
bb = s[sp]-'0'; sp--;
sp++;
s[sp]=(aa*bb)+'0';
}else if(k[i]=='/'){
aa = s[sp]-'0'; sp--;
bb = s[sp]-'0'; sp--;
sp++;
s[sp]=(bb/aa)+'0';
}else if(k[i]=='+'){
aa = s[sp]-'0'; sp--;
bb = s[sp]-'0'; sp--;
sp++;
s[sp]=(aa+bb)+'0';
}else if(k[i]=='-'){
aa = s[sp]-'0'; sp--;
bb = s[sp]-'0'; sp--;
sp++;
s[sp]=(bb-aa)+'0';
}
}
}
printf("dap=%d\n",s[1]-'0');
getch();
return 0;
}
(ÇÁ·Î±×·¥-2, ¼ö½Ä°è»ê-2)
#include<stdio.h>
#include<string.h>
char a[100], c[100];
int ka, bp=-1, cp=-1,kp=-1;
int k[101];
struct data{
bool f;
int b;
}b[100];
int ff=0;
int main()
{
int i;
scanf("%s",a);
ka=strlen(a);
for(i=0; i<ka; i++){
if(a[i]>='0' && a[i] <='9'){
if(ff==0) bp++;
b[bp].f=0;
b[bp].b=b[bp].b*10+(a[i]-'0');
ff=1;
}
else if(a[i]=='*' || a[i]=='/'){
ff=0;
if(c[cp]=='*' || c[cp]=='/'){
bp++;
b[bp].f=1;
b[bp].b=c[cp];
cp--;
}
cp++; c[cp]=a[i];
}
else if(a[i]=='+' || a[i]=='-'){
ff=0;
if(c[cp]=='*' || c[cp]=='/' || c[cp]=='+' || c[cp]=='-'){
bp++;
b[bp].f=1;
b[bp].b=c[cp];
cp--;
}
cp++; c[cp]=a[i];
}
else if(a[i]=='('){
cp++; c[cp]=a[i];
}
else if(a[i]==')'){
while(c[cp]!='('){
bp++;
b[bp].f=1;
b[bp].b=c[cp];
cp--;
}
cp--;
}
}
for(i=cp; i>=0; i--){
bp++;
b[bp].f=1;
b[bp].b=c[cp];
cp--;
}
for(i=0; i<=bp; i++){
if(b[i].f==0) printf("%d ",b[i].b);
else printf("%c ",b[i].b);
}
printf("\n");
for(i=0; i<=bp; i++){
if(b[i].f==0){
kp++; k[kp]=b[i].b;
}
else if(b[i].f==1){
if(b[i].b=='+'){k[kp-1]=k[kp-1]+k[kp];kp--;}
else if(b[i].b=='-'){k[kp-1]=k[kp-1]-k[kp];kp--;}
else if(b[i].b=='*'){k[kp-1]=k[kp-1]*k[kp];kp--;}
else if(b[i].b=='/'){k[kp-1]=k[kp-1]/k[kp];kp--;}
}
}
printf("ans=%d\n",k[0]);
return 0;
}
|