boj 1511 简单科学计算器 代码非常繁杂 思路不是特别好`

地址:http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1511

1.进栈出栈操作不要闹混。

2.要用float类型,虽然最后结果一定为整数 但是中间数可能不是 比如3/2+3/2 不用float就是2 而用了float就是3.

 

科学计算器 Submit: 3087    Accepted:617 Time Limit: 1000MS  Memory Limit: 65536K

Description
给你一个不带括号的表达式,这个表达式只包含加、减、乘、除,请求出这个表达式的最后结果,最后结果一定是整数;


Input
一个数学表达式,只包括数字,数字保证是非负整数,以及五种运算符"+","-","*","/","=";数字和运算符之间有一个或者多个空格,运算符的总数不会超过100,最后以"="号结尾,表示表达式结束。注意:使用C的同学,在读取字符串的时候请使用scanf("%s",..);以免不必要的错误。



Output
整数;


Sample Input

1 + 2 + 3 * 6 / 9 =


Sample Output

5


Source

#include<iostream>
using namespace std;
char a[1000];
char op[101];
float num[101];
int main()
{
   int i=0,j,sum=0,optop=0,numtop=0;
   float tempo,tempt,numtemp;     // 注意用浮点型
   char c,temp;
 
 
   while((c=getchar())!='/n')
   {
      if(c>='0'&&c<='9')
      {
         numtemp=numtemp*10+c-'0';              
                        } 
      if(c=='+'||c=='-')
      {
         if(op[optop-1]!=NULL)
           {
              tempo=num[--numtop];
              tempt=num[--numtop];
              temp=op[--optop];
              if(temp=='*')
              {
                tempo=tempo*tempt;
                num[numtop++]=tempo;
                }
              if(temp=='/')
              {
                tempo=tempt/tempo;
                num[numtop++]=tempo;
                            }
                if(temp=='+')
              {
                tempo=tempo+tempt;
                num[numtop++]=tempo;           
                        }
              if(temp=='-')
              {
                tempo=tempt-tempo;
                num[numtop++]=tempo;           
                        }
                   
                     }  
        
          op[optop]=c;
          optop++;     
         
                        } //if
      if(c=='*'||c=='/')
      {
       
       if(op[optop-1]=='*'||op[optop-1]=='/')
       {
             tempo=num[--numtop];
              tempt=num[--numtop];
              temp=op[--optop];
              if(temp=='*')
              {
                tempo=tempo*tempt;
                num[numtop++]=tempo;
                }
              if(temp=='/')
              {
                tempo=tempt/tempo;
                num[numtop++]=tempo;
                            }                              
                                     }//if
         op[optop]=c;
         optop++; 
                              
                          }
      if(int(c)==32&&numtemp!=0)
      {
         num[numtop]=numtemp;
         numtop++;
         numtemp=0;       
                 }  
     
       if(c=='=')
       {
      
         while(optop>0)
         {
              tempo=num[--numtop];
              tempt=num[--numtop];
              temp=op[--optop];
              if(temp=='*')
              {
                tempo=tempo*tempt;
                num[numtop++]=tempo;
                }
              if(temp=='/')
              {
                tempo=tempt/tempo;
                num[numtop++]=tempo;           
                        }
               if(temp=='+')
              {
                tempo=tempo+tempt;
                num[numtop++]=tempo;           
                        }
              if(temp=='-')
              {
                tempo=tempt-tempo;
                num[numtop++]=tempo;           
                        }
                 
                      
                 }    //while 
              printf("%.0f/n",num[--numtop]);       
                             }//if
  
   }

      system("pause");

    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值