zoukankan      html  css  js  c++  java
  • hdu 1237 简单计算器

    解题思路:
    从左至右观察式子:4 + 2 - 2 * 5 - 7 / 11
    1,当遇到第二个加减的时候,前一个加减可运算,
    2.遇到乘除的时候直接计算出结果。
    3。用STL中封装的栈结构实现。

    #include<stdio.h> #include<stack> #include<string.h> #include<iostream> using namespace std; int main() { char s[250]; double a,b,su; char c; while(gets(s)&&strcmp(s,"0")!=0) { stack<double>s1; stack<char>s2; for(int i=0;s[i];i++) { if(s[i]>='0'&&s[i]<='9') { a=0; while(s[i]>='0'&&s[i]<='9')//字符转换为数 { a =a*10 + s[i]-'0'; i++; } i--; s1.push(a); } else if(s[i]=='-'||s[i]=='+') { if(!s2.empty())//第二次遇到加号或减号 { //前一个(+或—)运算可执行 a=s1.top();s1.pop(); b=s1.top();s1.pop(); c=s2.top();s2.pop(); if(c=='-')s1.push(b-a); else s1.push(b+a); } s2.push(s[i]); } else if(s[i]=='*'||s[i]=='/')//遇到乘除直接运算 { c=s[i]; i=i+2; b=0;//乘除号的右数 while(s[i]>='0'&&s[i]<='9') { b=b*10+s[i]-'0'; i++; } i--; a=s1.top();s1.pop();//乘除号的左数 if(c=='*')s1.push(a*b);//结果入栈 else s1.push(a/b); } } if(!s2.empty()) //最后最多进行一次加减运算 { c=s2.top();s2.pop(); a=s1.top();s1.pop(); b=s1.top();s1.pop(); if(c=='+')s1.push(a+b); else s1.push(b-a); } su=s1.top(); printf("%.2lf\n",su); } return 0; }

    小结:

          1.代码写好了,还Wrong两次,float改为double就RE了。

            今后绝对无条件用 double!!!!!!!!!!!!

           2.学习了一种新的输入gets(s)&&strcmp(s,"0")!=0,gets(s)以回车为输入结束('\0')。

           判断时for(int i=0;s[i];i++)。字符中的‘\0’对应整数0。

  • 相关阅读:
    微信小程序获取用户绑定手机号码完整版
    SQL读取当天的数据
    Android 百度离线地图(由apk文件转入手机内部存储)
    解决windows家庭版系统不支持远程桌面功能问题
    微信小程序携参跳转页面
    微信小程序 websocket 封装
    微信小程序HTTP请求封装
    Ionic项目打包Android在9版本以上不能进行HTTP通信问题
    Ionic 使用 MQTT
    Ionic HTTP 请求
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3000884.html
Copyright © 2011-2022 走看看