1. 程式人生 > >求值 模擬

求值 模擬

har for scrip cstring int mes desc inf 出了

[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;
}

求值 模擬