五則運算 (無須轉後序版)
提供者 : 小光
內容概要 :
輸入隨便你
他編寫的程式碼似乎可以隨便打
/**********************************************************/
/*暴力版五則運算 不用轉後序!! by 小光*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char s[100];
int a,ns[100]={0};
int operation (int end)
{
int b,sum=0,first=0;
int value[100]={0},top=1;
if(ns[a]>0)
value[0]=ns[a];
for(;a<end;a++)
{
if(ns[a]==-7) break;
if(ns[a]==-6)
{
a=a+1;
value[top++]=operation(end);
}
if(ns[a]==-1)
{
if(ns[a+1]==-6)
{
a=a+2;
value[top++]=operation(end);
}
else
value[top++]=ns[a+1];
}
if(ns[a]==-2)
{
if(ns[a+1]==-6)
{
a=a+2;
value[top++]=-operation(end);
}
else
value[top++]=-ns[a+1];
}
if(ns[a]==-3)
{
if(ns[a+1]==-6)
{
a=a+2;
value[top-1]*=operation(end);
}
else
value[top-1]*=ns[a+1];
}
if(ns[a]==-4)
{
if(ns[a+1]==-6)
{
a=a+2;
value[top-1]/=operation(end);
}
else
value[top-1]/=ns[a+1];
}
if(ns[a]==-5)
{
if(ns[a+1]==-6)
{
a=a+2;
value[top-1]%=operation(end);
}
else
value[top-1]%=ns[a+1];
}
}
for(b=0;b<100;b++)
sum=sum+value[b];
return sum;
}
main()
{
while(gets(s))
{
a=0;
int b,top=0,n=strlen(s),temp=0,flag=0;
for(b=0;b<n;b++)
if(s[b]<=57&&s[b]>=48)
{
temp=temp*10+s[b]-48;
flag=1;
}
else if(s[b]==' ')
{
if(flag==1)
ns[top++]=temp;
flag=0;
temp=0;
}
else if(s[b]=='+')
{
if(flag==1)
ns[top++]=temp;
flag=0;
temp=0;
ns[top++]=-1;
}
else if(s[b]=='-')
{
if(flag==1)
ns[top++]=temp;
flag=0;
temp=0;
ns[top++]=-2;
}
else if(s[b]=='*')
{
if(flag==1)
ns[top++]=temp;
flag=0;
temp=0;
ns[top++]=-3;
}
else if(s[b]=='/')
{
if(flag==1)
ns[top++]=temp;
flag=0;
temp=0;
ns[top++]=-4;
}
else if(s[b]=='%')
{
if(flag==1)
ns[top++]=temp;
flag=0;
temp=0;
ns[top++]=-5;
}
else if(s[b]=='(')
{
if(flag==1)
ns[top++]=temp;
flag=0;
temp=0;
ns[top++]=-6;
}
else if(s[b]==')')
{
if(flag==1)
ns[top++]=temp;
flag=0;
temp=0;
ns[top++]=-7;
}
if(temp!=0||flag==1)
ns[top++]=temp;
printf("%d\n",operation(top));
}
return 0;
}
上一篇:加減乘除問題
下一篇:KILL ME (KM)