码迷,mamicode.com
首页 > 其他好文 > 详细

简单计算器(非常简便)

时间:2018-02-09 15:37:22      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:解题思路   style   for   一个栈   char   body   下标   小数点   bsp   

题目描述:
    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入:
    测试输入包含若干测试用例,每个测试用例占一行,每行不超过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==\n) 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\n",ret);
47     }
48 
49     return 0;
50 }

 

简单计算器(非常简便)

标签:解题思路   style   for   一个栈   char   body   下标   小数点   bsp   

原文地址:https://www.cnblogs.com/yuxiaoba/p/8434749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!