#18950: 明明通過測試AC,送出解答WA


sychao (david)

學校 : 國立交通大學
編號 : 100857
來源 : [116.89.142.112]
最後登入時間 :
2023-01-08 17:44:42
a017. 五則運算 | From: [180.217.192.190] | 發表日期 : 2019-08-16 18:19

//含括號之五則計算
//
#include <stdio.h>
#include <string.h>


int ix;
char s[1000];
int calc(int istart,int iend)
{
int ops=0,opc=0;
int oprand[100];
char opcode[100];
int result=0;int i;
for(i=0;i<10;i++)
{
oprand[i]=0;
opcode[i]='\0';
}

for(ix=istart;ix<=iend;ix++)
{
if(s[ix]==' ')
{
continue;
}

if(s[ix]>='0' && s[ix]<='9')
{
oprand[ops]=0;
while(s[ix]!=' ' && s[ix]!='\0')
oprand[ops]=oprand[ops]*10+(s[ix++]-48);
ops++;
if(opcode[opc-1]=='*')
{
oprand[ops-2] *= oprand[ops-1];
opc--;
ops--;
}
if(opcode[opc-1]=='/')
{
oprand[ops-2] /= oprand[ops-1];
opc--;
ops--;
}
if(opcode[opc-1]=='%')
{
oprand[ops-2] %= oprand[ops-1];
opc--;
ops--;
}
}
else
{
switch(s[ix])
{
case '+':
if(opc==0)
oprand[ops-2] += oprand[ops-1];
else if(opcode[opc-1]=='+')
{
oprand[ops-2] += oprand[ops-1];
ops--;
opcode[--opc]='\0';
}
else if(opcode[opc-1]=='-')
{
oprand[ops-2] -= oprand[ops-1];
ops--;
opcode[--opc]='\0';
}
opcode[opc++]='+';
break;
case '-':
if(opc==0)
oprand[ops-2] += oprand[ops-1];
else if(opcode[opc-1]=='+')
{
oprand[ops-2] += oprand[ops-1];
ops--;
opcode[--opc]='\0';
}
else if(opcode[opc-1]=='-')
{
oprand[ops-2] -= oprand[ops-1];
ops--;
opcode[--opc]='\0';
}
opcode[opc++]='-';
break;
case '*':
opcode[opc++]= '*';
break;
case '/':
opcode[opc++]= '/';
break;
case '%':
opcode[opc++]= '%';
break;
case '(':

oprand[ops]=calc(ix+1,strlen(s));
ops++;

break;
case ')':

goto endWhile;
break;
}
}
}
endWhile:
if(opc!=0)
{
if(opcode[opc-1]=='+')
{
oprand[ops-2] += oprand[ops-1];
opc--;
ops--;
}
else if(opcode[opc-1]=='-')
{
oprand[ops-2] -= oprand[ops-1];
opc--;
ops--;
}

else if(opcode[opc-1]=='*')
{
oprand[ops-2] *= oprand[ops-1];
opc--;
ops--;
oprand[ops-2] += oprand[ops-1];
opc--;
}
else if(opcode[opc-1]=='/')
{
oprand[ops-2] /= oprand[ops-1];
opc--;
ops--;
oprand[ops-2] += oprand[ops-1];
opc--;
}
else if(opcode[opc-1]=='%')
{
oprand[ops-2] %= oprand[ops-1];
opc--;
ops--;
oprand[ops-2] += oprand[ops-1];
opc--;
}
}
result = oprand[ops-1];
ops--;
return result;
}
int main()
{

int i=0,result;

while( gets(s) != NULL ){
result = calc(0,strlen(s));
printf("%d\n",result);
}

printf("\n");
return 0 ;
}

 
ZeroJudge Forum