• 简单计算器(非常简便)


    题目描述:
        读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
    输入:
        测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
    输出:
        对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
    样例输入:
    1 + 2
    4 + 2 * 5 - 7 / 11
    0
    样例输出:
    3.00
    13.36

    解题思路:这道题因为是没有括号的,因而建立一个栈,若遇到加号把数字入栈,若遇到减号则转换为负数后入栈,若遇到乘除则就近直接计算后再把数值写回栈尾。最后再将栈内数字全部相加得到最后的结果。

                        不得不说这样做非常巧妙,不用像传统的做法那样创建一个栈保存运算符,比起王道书上的标准答案代码量也小了很多

     1 #include <stdio.h>
     2 #include<stdlib.h>
     3 
     4 double ans[1002];
     5 int tail;  //尾数下标
     6 
     7 int main()
     8 {
     9     int temp1,temp2;
    10     int i;
    11     char c1,c2;
    12     double ret;
    13 
    14     while( scanf("%d%c",&temp1,&c2)!=EOF )
    15     {
    16         if( temp1==0 && c2=='
    ') break;  //如果输入只有0时结束
    17         tail = 0;   //注意每次都要置0
    18         ret = 0;    //注意每次都要置0
    19         ans[++tail] = 1.0*temp1;  //转换为浮点数
    20         while(scanf("%c %d%c",&c1,&temp2,&c2)!=EOF)
    21         {
    22             if( c1=='+')
    23             {
    24                 ans[++tail] = 1.0*temp2;  //如果是加号直接入栈
    25             }
    26             else if( c1=='-')
    27             {
    28                 ans[++tail] = -1.0*temp2;  //如果是负号转换为负数再入栈
    29             }
    30             else if( c1=='*')
    31             {
    32                 ans[tail] *= temp2;   //如果是乘号则更新栈尾数
    33 
    34             }
    35             else if( c1=='/'&&temp2!=0)
    36             {
    37                 ans[tail] /= temp2;   //如果是除号则更新栈尾数
    38             }
    39             else break;
    40             if( c2!=' ') break;  //如果最后一个字符不是空格则输入结束
    41         }
    42         for( i=1; i<=tail; i++)
    43         {
    44             ret += ans[i];   //把栈里头的东西全部加起来,求和
    45         }
    46         printf("%.2lf
    ",ret);
    47     }
    48 
    49     return 0;
    50 }
    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    Windows / Linux / MacOS 设置代理上网的方法汇总
    Centos7 配置 sendmail、postfix 端口号25、465
    CentOS 6/7 配置 sendEmail 发送邮件
    Python 发送 email 的三种方式
    Linux curl 命令模拟 POST/GET 请求
    Python + Selenium + Chrome 使用代理 auth 的用户名密码授权
    Python + Selenium + Firefox 使用代理 auth 的用户名密码授权
    Jenkins+JMeter+Ant 接口持续集成
    接口自动化、移动端、web端自动化如何做?
    pytest--命令行参数
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8434749.html
Copyright © 2020-2023  润新知