您的位置:首页 > 其它

HDU 1237 简单计算器

2017-10-13 14:21 197 查看

http://acm.hdu.edu.cn/showproblem.php?pid=1237

 

简单计算器

Time
Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K
(Java/Others)

Total Submission(s): 7456 Accepted Submission(s):
2401


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

[align=left]Input[/align]

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

[align=left]Output[/align]

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

[align=left]Sample Input[/align]

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

[align=left]Sample Output[/align]

3.00
13.36

[align=left]Source[/align]

浙大计算机研究生复试上机考试-2006年

[align=left]Recommend[/align]
JGShining
 

分析:乘除号应该是这个题的难点,只要把乘除号处理好,剩下的相加很简单。
代码如下:

#include<iostream>

#include<string>

using namespace std;

int main()

{

 double num[100]; //用于储存经过乘除计算需要最后相加的数字

 char
f;         
//储存符号

 double
s;       
//储存输入的数字

 double
ans;     
//最后的答案

 while(cin>>s)

 {

  memset(num,'\0',sizeof(num));

  num[0]=s;

  f=getchar();

  if(f=='\n'&&s==0)
break;

  int i=0;

  while(1)

  {

   cin>>f>>s;

   if(f=='*')
num[i]*=s;

   else
if(f=='/') num[i]/=s;

   else
if(f=='+') num[++i]=s;

   else
num[++i]=-s;

   if(getchar()=='\n')
break;

  }

  ans=0;

  for(i;i>=0;i--)

  {

   ans+=num[i];

  }

  printf("%.2lf\n",ans);

 }

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: