hdu—1237简单计算器

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

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

Sample Output

3.00
13.36

题意描述:
输入一行表达式算出结果数值;
解题思路:
将每一个小单元计算(当遇到输入的字符是加减时表示前一个数可以做为一个小单元,遇到的是乘除是讲当前结果存到sum里面来对进行输入下一个数时进行运算)的结果存储到一个数组中去然后将结果相加就好;在计算到的时候只需要在遇到加和减时将以前的结果存储到一个单元中把输入的数进行下一次加减乘除运算;
当前我也有提到在计算的时候sum表示的是一个数,或者两个数的乘和除;
原因:因为遇到加法减法时前面计算的结果对当前的数值在最后加减是没有影响的;
实际上通过暑假这一段时间的训练明白了当你在看一段代码当你看不懂的时候不妨将样例代入查看,在用样例跑代码的时候就会明白代码的意思;
AC代码:

#include<stdio.h>
#include<string.h>
int main()
{
	int t,k;
	char c;
	double sum,num[1000];
	while(scanf("%d", &t)!=EOF)
	{
		memset(num,0,sizeof(num));
		k=0;sum=t*1.0;
		if(t==0&&(c=getchar()=='\n'))
		   return 0;
		while((c=getchar())!='\n')
		{
			if(c=='*')
			{
				scanf("%d", &t);
				sum*=t;
			}
			if(c=='/')
			{
				scanf("%d", &t);
				sum/=t*1.0;
			}
			if(c=='+')
			{
				num[k++]=sum;
				scanf("%d", &t);
				sum=t*1.0;
			}
			if(c=='-')
			{
				num[k++]=sum;
				scanf("%d", &t);
				sum=-t*1.0;
			}
		}
			num[k++]=sum;sum=0;
			for(int i=0; i<k; i++)
			{
				sum+=num[i];
			}
			printf("%.2f\n", sum);
	}
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮皮皮皮皮皮卡乒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值