• 求值 模拟


    [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
    ",ans);
    
    	return 0;
    }
    
  • 相关阅读:
    Java:synchronized关键字引出的多种锁
    Java:Web Service初入门
    Java:HashMap原理与设计缘由
    Java:集合类的数据结构
    NoSQL数据库兴起
    Hadoop介绍与安装
    Java:泛型的理解
    《代码整洁之道》总结和笔记
    shell运算
    shell变量
  • 原文地址:https://www.cnblogs.com/gshdyjz/p/7700060.html
Copyright © 2020-2023  润新知