1 条题解

  • 0
    @ 2024-12-22 11:04:50

    C :

    #include<stdio.h>
    #include<math.h>
    #define maxn 101
    int push1(int n,double *p,double v)
    {
    	n++;
    	p[n]=v;
    	return n;
    }
    double pop1(int n,double *p)
    {
    	return p[n];
    }
    int push2(int n,char *p,char v)
    {
    	n++;
    	p[n]=v;
    	return n;
    }
    int main()
    {
    	char str[maxn],stackope[maxn],op;
    	int nn=0,np=0,i;
    	double stacknum[maxn],sec,fir;
    	scanf("%s",str);
    	for(i=0;str[i]!='@';i++)
    	{
    		if(str[i]>='0'&&str[i]<='9')
    		nn=push1(nn,stacknum,(str[i]-'0')*1.00);
    		else
    		{
    		   if(np==0) np=push2(np,stackope,str[i]);
    		  else if(str[i]=='(') np=push2(np,stackope,str[i]);
    		  else if(str[i]==stackope[np]) 
    		   {
    		   	 sec=pop1(nn,stacknum);nn--;
    		   	 fir=pop1(nn,stacknum);nn--;
    		   	 if(str[i]=='+') { nn=push1(nn,stacknum,fir+sec);}
    		   	 if(str[i]=='-') { nn=push1(nn,stacknum,fir-sec);}
    		   	 if(str[i]=='*') { nn=push1(nn,stacknum,fir*sec);}
    		   	 if(str[i]=='/') { nn=push1(nn,stacknum,fir/sec);}
    		   	}
    		   	else if(str[i]=='+')
    		   	{
    		   		if(stackope[np]=='*') 
    		   		{
    		   		  sec=pop1(nn,stacknum);nn--;
    		   	      fir=pop1(nn,stacknum);nn--;
    		   	      nn=push1(nn,stacknum,fir*sec);np--;
    		   	      np=push2(np,stackope,str[i]);
    			    }
    			    else if(stackope[np]=='/') 
    		   		{
    		   		  sec=pop1(nn,stacknum);nn--;
    		   	      fir=pop1(nn,stacknum);nn--;
    		   	      nn=push1(nn,stacknum,fir/sec);np--;
    		   	      np=push2(np,stackope,str[i]);
    			    }
    			     else if(stackope[np]=='-') 
    		   		{
    		   		  sec=pop1(nn,stacknum);nn--;
    		   	      fir=pop1(nn,stacknum);nn--;
    		   	      nn=push1(nn,stacknum,fir-sec);np--;
    		   	      np=push2(np,stackope,str[i]);
    			    }
    			    else
    			      np=push2(np,stackope,str[i]);
    		   		
    		   	 }
    		   	 else if(str[i]=='-')
    		   	{
    		   		if(stackope[np]=='*') 
    		   		{
    		   		  sec=pop1(nn,stacknum);nn--;
    		   	      fir=pop1(nn,stacknum);nn--;
    		   	      nn=push1(nn,stacknum,fir*sec);np--;
    		   	      np=push2(np,stackope,str[i]);
    			    }
    			    else if(stackope[np]=='/') 
    		   		{
    		   		  sec=pop1(nn,stacknum);nn--;
    		   	      fir=pop1(nn,stacknum);nn--;
    		   	      nn=push1(nn,stacknum,fir/sec);np--;
    		   	      np=push2(np,stackope,str[i]);
    			    }
    			     else if(stackope[np]=='+') 
    		   		{
    		   		  sec=pop1(nn,stacknum);nn--;
    		   	      fir=pop1(nn,stacknum);nn--;
    		   	      nn=push1(nn,stacknum,fir+sec);np--;
    		   	      np=push2(np,stackope,str[i]);
    			    }
    		   		else
    		   		  np=push2(np,stackope,str[i]);
    		   	}
    		   	else if(str[i]=='*'||str[i]=='/')
    		   	{
    		   		if(stackope[np]=='*') 
    		   		{
    		   		  sec=pop1(nn,stacknum);nn--;
    		   	      fir=pop1(nn,stacknum);nn--;
    		   	      nn=push1(nn,stacknum,fir*sec);np--;
    		   	      np=push2(np,stackope,str[i]);
    			    }
    			    else if(stackope[np]=='/') 
    		   		{
    		   		  sec=pop1(nn,stacknum);nn--;
    		   	      fir=pop1(nn,stacknum);nn--;
    		   	      nn=push1(nn,stacknum,fir/sec);np--;
    		   	      np=push2(np,stackope,str[i]);
    			    }
    			    else
    			      np=push2(np,stackope,str[i]); 
                    		   		
    		   	}
    		   	else if(str[i]=='^')
    		   	 {
    		   	   sec=pop1(nn,stacknum);nn--;
    		   	   nn=push1(nn,stacknum,pow(sec,(str[i+1]-'0')));
    		   	   i=i+1;
    		   	   continue;
    		   	}
    		   	else
    		   	  {
    		   	  	while(stackope[np]!='(')
    		   	  	{
    		   	  	  sec=pop1(nn,stacknum);nn--;
    		   	      fir=pop1(nn,stacknum);nn--;
    		   	      op=stackope[np];
    		   	      if(op=='+') nn=push1(nn,stacknum,fir+sec);
    		   	      if(op=='-') nn=push1(nn,stacknum,fir-sec);
    		   	      if(op=='*') nn=push1(nn,stacknum,fir*sec);
    		   	      if(op=='/') nn=push1(nn,stacknum,fir/sec);
    		   	      np--;
    		   	  	}
    		   	  	np--;
    		   	  }
    		   }
    		    
    		}
    		while(np!=0)
    		{
    		 sec=pop1(nn,stacknum);nn--;
    	     fir=pop1(nn,stacknum);nn--;
    		  op=stackope[np];
      	      if(op=='+') nn=push1(nn,stacknum,fir+sec);
    	      if(op=='-') nn=push1(nn,stacknum,fir-sec);
    		  if(op=='*') nn=push1(nn,stacknum,fir*sec);
    		  if(op=='/') nn=push1(nn,stacknum,fir/sec);
    		   	np--;
    		}
    		printf("%d",(int)stacknum[nn]);
    		
    	
    	return 0;
    }
    

    信息

    ID
    406
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者