简单计算器

简单计算器

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 34   Accepted Submission(s) : 11

Font: Times New Roman | Verdana | Georgia

Font Size:

Problem Description

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

Sample Input

1 + 2
4 + 2 * 5 - 7 / 11
0

Sample Output

3.00
13.36

Source

浙大计算机研究生复试上机考试-2006年
数据从左到右输入
运算也应从做到右;
运算符从左到右入栈;
要想运算从左到右
将数据和运算符  移动到另外两个栈里面;
数据输入 遇到 *  /  先处理数据
#include<iostream>
#include<stack>
using namespace std;
int main()
{
    char word[205];
    while(gets(word))
    {
        if(strlen(word)==1&&word[0]=='0')
            break;
        
        int num;
        num=0;
        stack<double> shu;
        stack<char> fuhao;
        int nowshu=0;//记录数值
        for(num=0;word[num]!='\n';)
        {
            nowshu=0;
            if(word[num]>='0'&&word[num]<='9')
            {
                while(word[num]>='0'&&word[num]<='9')
                {
                    nowshu=nowshu*10+word[num++]-'0';
                    
                }
                shu.push(nowshu);
                continue;
                
            }
            else    if(word[num]==' ')
            {
                num++;
                continue;
                
            }
            else    if(word[num]=='+')//加法
            {
                fuhao.push(word[num]);
                num++;                 //符号进栈
                continue;
                
            }
            else    if(word[num]=='-')//减法
            {
                fuhao.push(word[num]);
                num++;                //符号进栈
                continue;
            }
            else    if(word[num]=='*')//乘法
            {
                double number;
                num++;
                while(word[num]==' ')
                {
                    num++;
                }
                
                while('0'<=word[num]&&word[num]<='9')//取下一个数
                {
                    nowshu=nowshu*10+word[num++]-'0';
                    
                }
                number=nowshu*shu.top();
                shu.pop();
                shu.push(number);
                
                continue;
            }
            else    if(word[num]=='/')//除法
            {
                double number3;
                num++;
                while(word[num]==' ')
                {
                    num++;
                }
                while('0'<=word[num]&&word[num]<='9')//取下一个数
                {
                    nowshu=nowshu*10+word[num++]-'0';
                    
                }
                number3=shu.top()/nowshu;
                shu.pop();
                shu.push(number3);
                
                continue;
            }
            else break;
            
            
        }//除法 乘法处理完
        stack<double>shu2;//数据逆置
        stack<char>fuhao2;//运算从左到右 
        while(!shu.empty())
        {
            shu2.push(shu.top());
            shu.pop();
        }
        while(!fuhao.empty())
        {
            fuhao2.push(fuhao.top());
            fuhao.pop();
        
        }
        while(!shu2.empty()&&!fuhao2.empty())//数据重来 运算从左到右
        {
            double number2;
            char fuhao3;
            number2=shu2.top();
            shu2.pop();
            fuhao3=fuhao2.top();
            if(fuhao3=='+')
            {
                number2=number2+shu2.top();
                shu2.pop();
                shu2.push(number2);
                fuhao2.pop();
                
                
                
            }
            if(fuhao3=='-')
            {
                number2=number2-shu2.top();
                shu2.pop();
                shu2.push(number2);
                fuhao2.pop();
                
                
            }
            
        }//所有符号处理完
        printf("%.2lf\n",shu2.top());
        
    }
    
    return 0;
}
/*
1 + 2
5
4 + 2 * 5 - 7 / 11
3
0 + 5
1 - 2 * 3 * 4 + 5 * 6
1 * 2 * 3 + 5 + 6 - 7 * 8 + 9 / 10
0 + 0 * 0
1 + 5 * 0
0 + 5
0

  */

 

 
posted @ 2013-08-16 17:17  一只蚊子  阅读(122)  评论(0编辑  收藏  举报