24h購物| | PChome| 登入
2009-09-05 18:18:22| 人氣1,244| 回應0 | 上一篇 | 下一篇

五則運算 (無須轉後序版)

推薦 0 收藏 0 轉貼0 訂閱站台

提供者 : 小光

內容概要 :

輸入隨便你

他編寫的程式碼似乎可以隨便打

/**********************************************************/

/*暴力版五則運算   不用轉後序!! 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;
}

台長: 來源不明

您可能對以下文章有興趣

人氣(1,244) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ZeroJudge 基礎+原創題庫 |
此分類下一篇:KILL ME (KM)
此分類上一篇:加減乘除問題

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文