HDU-1237-简单计算器_简单计算器 hdu - 1237-程序员宅基地

技术标签: 栈和队列  HDU  

简单计算器

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12457    Accepted Submission(s): 4096


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

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

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

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

Sample Output
  
  
   
3.00 13.36
    
    
     
大水比第一次写博客,记录自己的点点滴滴吧,大神请绕道,。。
上次看完栈和队列就想刷刷题,,
一直没找到机会。。
现在有了。。。不过头晕晕的,,,做的很水,,也做了很久,,,唉,,该自我反省了,,做的太慢了,,
第一次做有两个栈的,有点力不从心吧,以后加油,贴个代码。。
#include <stdio.h>
#include <string.h>

double num_stack[210];
char char_stack[210];
int top, ctop;

double Gettop()
{
	return num_stack[top-1];
}

char Getctop()
{
	return char_stack[ctop-1];
}

void Push_n(double a)
{
	num_stack[top++]=a;
}

void Push_c(char ch)
{
	char_stack[ctop++]=ch;
}

int main()
{
	int i, num;
	char a[210];
	while(gets(a)) 
	{
		if(strlen(a)==1 && a[0]=='0')break;
		int len=strlen(a);
		top=0;ctop=0;
		for(i=0; i<len; i++)
		{
			if(a[i]<='9' && a[i]>='0')
			{
				double k=a[i]-'0';
				while(a[i+1]<='9' && a[i+1]>='0')
				{
					i++;
					k=k*10+a[i]-'0';
				}
				Push_n(k);
			}
			else if((a[i]=='/'||a[i]=='*'||a[i]=='+'||a[i]=='-'))
			{
				if((a[i]=='*' || a[i]=='/'))
				{
					int m=i;
					while(!(a[i]<='9' && a[i]>='0'))i++;
					if(a[i]<='9' && a[i]>='0')
					{
						double k=a[i]-'0';
						while(a[i+1]<='9' && a[i+1]>='0')
						{	
							i++;
							k=k*10+a[i]-'0';
						}
						Push_n(k);
					}
					if(a[m]=='*')
					{
						num_stack[top-2]=num_stack[top-2]*num_stack[top-1];
						top--;
					}
					else if(a[m]=='/')
					{
						num_stack[top-2]=num_stack[top-2]/num_stack[top-1];
						top--;
					}
				}
				else 
				{
					Push_c(a[i]); 
				}
			}
		} 
		int n=0;
		for(int l=0; l<ctop; l++)
		{
			if(char_stack[l]=='+')
			{
				num_stack[n+1]=num_stack[n+1]+num_stack[n];
				n++;
			}
			if(char_stack[l]=='-')
			{
				num_stack[n+1]=num_stack[n]-num_stack[n+1];
				n++;
			}
		}
		printf("%.2lf\n", num_stack[n]); 
	}
	return 0;
}



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014355480/article/details/40251071

智能推荐

javascript slice()方法-程序员宅基地

文章浏览阅读729次。定义和用法 slice() 方法可从已有的数组中返回选定的元素。语法arrayObject.slice(start,end)参数描述 start |必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。end |可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包

微信小程序趋势及前景,BAT大厂面试总结-程序员宅基地

文章浏览阅读54次。前言工欲善其事必先利其器!在现代IT中,每个Android程序员都需要最好的工具来提高他们的技能和效率。在Android应用程序开发这个残酷的竞争行业中,只有优秀的程序员才能生存下去。你需要向客户展示你拥有的最佳技术和能力。不仅仅是展示你的设备以吸引客户,还要确保你的Android应用程序在高效的时间内以最高质量构建。那么哪些是最好的Android开发者工具?有很多选择,但并非所有工具都足够好。在不浪费任何时间的情况下,让我们来看看以下的Android应用开发工具。教你写简历你真的会写简历么?8

php代码审计——弱类型-程序员宅基地

文章浏览阅读590次。本文目录前言extract变量覆盖知识了解例题实战strcmp比较字符串知识了解例题实战urldecode二次编码绕过知识了解例题实战md5()函数知识了解例题实战数组返回NULL绕过知识了解例题实战弱类型整数大小比较绕过题中了解相关知识前言现在开始接触代码审计类型的题了,学长给我们讲过了bugku的一些题,然后我看了一些其他的社区的文章和博客,学习了简单的php代码审计,并在学习过后做几道相...

iOS 修改苹果开发者公司账号(Apple ID 更换)_苹果应用开发者账号和公司认证不一致-程序员宅基地

文章浏览阅读9.1k次。公司之前申请开发者账号的人离职了,需要更换开发者公司账号,以免以后出问题。(只针对组织账号中的公司账号,非企业和个人账号)第一种方案:直接修改Apple id1、登录 苹果的Apple id管理网站https://appleid.apple.com/#!&page=signin,输入Apple id的账号密码,登录成功之。2、点击编辑,然后点击编辑Apple id,在下面的输..._苹果应用开发者账号和公司认证不一致

WPF 外部引用资源使用_wpf类库引入外部资源_女盆友——ZY的博客-程序员宅基地

文章浏览阅读239次。1.Startup:动态更改启动窗体代码//调用外部资源完整路径【C:\XXX.xaml】 var FilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WPF资源", "StyleDictionary.xaml"); //使用外部资源里面内容 ResourceDictionary RDictionary = new ResourceDictionary { _wpf类库引入外部资源

IJCAI 2022 | 即插即用分类器模块:一行代码大幅提升零样本学习方法效果_PaperWeekly的博客-程序员宅基地

文章浏览阅读327次。作者|陈督兵来源|机器之心来自南京理工大学和牛津大学的研究者提出了一个即插即用的分类器模块,只需修改一行代码就能大幅提升生成型零样本学习方法的效果,减少了分类器对于生成伪样本质量的依赖。零样本学习(Zero-Shot Learning)聚焦于对训练过程中没有出现过的类别进行分类,基于语义描述的零样本学习通过预先定义的每个类别的高阶语义信息来实现从可见类(seen..._aggressive data distillation

随便推点

mybatis根据日期查询、查询日期并返回-程序员宅基地

文章浏览阅读1.1k次。方法:1.查询日期,返回日期字符串//查询所有博客对应的年份,返回一个集合List<String> findGroupYear();2.根据日期查询//根据年份查询博客信息List<Blog> findByYear(@Param("year") String year);mybatis映射:<selec..._mabatis查询日期的返回值

使用Collections.emptyList()生成的List不支持add方法-程序员宅基地

文章浏览阅读582次。今天使用Collections.emptyList(),返回一个空的List 但是发现它不支持Add功能,调用Add会抛出unsupportedException, 在以后要返回一个空的List,并还需要后续操作时,不能使用Collections.emptyList()方法,看文档发现,List的实现类都有自己的实现,而返回的EmptyList的实现没有实现add(int index, E ele...

黑马程序员_java自学学习笔记(四)----封装、继承、多态-程序员宅基地

文章浏览阅读475次。黑马程序员_java自学学习笔记(四)----封装、继承、多态android培训、java培训、期待与您交流! (一) 封装 封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。 封装的原则: 1把尽可能多的东西藏起来.对外提供简捷的接口。 2把所有的属性藏起来。

XStream处理既有属性又有值的xml节点_xml既有属性又有值怎么生成-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏4次。Maven配置: com.thoughtworks.xstream xstream 1.4.7测试:package org.xstream;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.converters.Converter;import com.thoughtworks.xstre_xml既有属性又有值怎么生成

JAVA程序员笔记 第007篇—面向对象(一)、重载、构造方法_jvm会提供构造方法吗_山麓牧云的博客-程序员宅基地

文章浏览阅读120次。面向对象是JAVA学习中的重点,JAVA本身是一门面向对象编程语言,要体会"万事万物皆对象"的含义。首先,先理解 面向过程 与 面向对象 的区别:这里有更好的总结转载自 知乎:愣头青面向对象面向对象三大特征:继承封装多态四大(多一个:接口)封装:package包(见前几篇笔记)class类的定义类是抽象的,是自然界中 描述具有 相同特征 和 行为的事物的统称例如,人类:..._jvm会提供构造方法吗

python itertools.permutations_python itertools.permutations的算法_山海尽明意的博客-程序员宅基地

文章浏览阅读386次。你需要理解permutation cycles的数学理论,也就是所谓的“轨道”(了解两个“艺术术语”很重要,因为数学学科combinatorics的核心是相当高级的,你可能需要查找research papers,它可以使用两个术语中的任何一个)。对于排列理论的简单介绍,wikipedia可以提供帮助。我提到的每一个网址都提供了合理的参考书目,如果你对组合数学足够着迷,想进一步探索它并获得真正的理解..._python itertools permutation