求值 模拟

Posted 古时候的瘾君子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求值 模拟相关的知识,希望对你有一定的参考价值。

[Description]
小 77 是 2017 级信奥班的成员,因为哲学而出名。
小 77 的数学老师信奉大力刷题出奇迹,于是给他们出了 INF 道简单的数字运算题。每道题
都只包含加号,乘号和十以内的数字。虽然题很简单,但是小 77 觉得这么多题简直是浪费
时间,而他还要忙着钻研哲学,于是决定让你写一个程序自动运算。
[Input]
一行,一个只包含加号,乘号和十以内的数字(即数字范围为[0, 9])的算式。
[Output]
一行一个整数,对算式求值的结果。
[Sample]

 


[Tips]
数字,符号中间可能有一个或多个空格,也有可能没有空格。
算式去除空格后的长度不超过 100, 000。平均情况下每两个符号间有两个空格。
答案不会超过 64 位有符号整数范围。

 


 

记录两个符号和两个数字,每次是乘号就乘上。

我的栈是没必要用的,但是懒得改了。

代码:

 

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>

#define ll long long
#define il inline
#define db double

using namespace std;

int fu[1000045],top;

ll num[1000045],topp;

int main()
{
	freopen("eval.in","r",stdin);
	freopen("eval.out","w",stdout);

	char ch=getchar();

	ll ans=0;

	while(ch!=EOF)
		{
			if(ch==\'+\')
				fu[++top]=1;
			if(ch==\'*\')
				fu[++top]=2;
			if(ch>=\'0\'&&ch<=\'9\')
				{
					num[++topp]=ch-\'0\';
					if(fu[top]==2)
						{
							ll s=num[topp]*num[topp-1];
							num[--topp]=s;
							top--;
						}
				}
			ch=getchar();
		}
   
	for(int i=1;i<=topp;i++)
		ans+=num[i];
	
	printf("%lld\\n",ans);

	return 0;
}

 

以上是关于求值 模拟的主要内容,如果未能解决你的问题,请参考以下文章

求值 模拟

第九届省赛-表达式求值(模拟)

南阳 oj 表达式求值 题目35 数据结构 NYO题目链接

iOS Swift 中的 Android 片段模拟

php 在终端中模拟一点加载字符的片段

当我想模拟数据并测试 UI 片段时,doNothing() 不起作用