zoukankan      html  css  js  c++  java
  • 牛客算法周周练3

    链接:https://ac.nowcoder.com/acm/contest/5338/D
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 131072K,其他语言262144K
    64bit IO Format: %lld

    题目描述

    给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。

    输入描述:

    输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号。
    所有参与运算的数字均为 0 到 231-1 之间的整数。
    输入数据保证这一行只有0~9、+、*这12种字符。

    输出描述:

    输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于4位时,请只输出最后4位,前导0不输出。

    示例1

    输入

    1+1*3+4

    输出

    8

    说明

    计算的结果为8,直接输出8。

    示例2

    输入

    1+1234567890*1

    输出

    7891

    说明

    计算的结果为1234567891,输出后4位,即7891。

    示例3

    输入

    1+1000000003*1

    输出

    4

    说明

    计算的结果为1000000004,输出后4位,即4。

    备注:

    对于30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;
    对于80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;
    对于100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。

    学数据结构的栈的时候应该见过后缀表达式,这个就是一个简单的中缀表达式

    因为只有乘和加, 所以我们遇到乘法直接算, 剩下的数字存到栈里, 最后栈里的全做加法运算,加完即可

    因为只保留后面四位,要%1e4

     1 #include <bits/stdc++.h>
     2 typedef long long LL;
     3 #define pb push_back
     4 const int INF = 0x3f3f3f3f;
     5 const double eps = 1e-8;
     6 const int mod = 1e9+7;
     7 const int maxn = 1e5+10;
     8 using namespace std;
     9 
    10 string str;
    11 stack<int> sk;
    12 
    13 int main()
    14 {
    15     #ifdef DEBUG
    16     freopen("sample.txt","r",stdin); //freopen("data.out", "w", stdout);
    17     #endif
    18     
    19     cin>>str;
    20     for(int i=0;i<str.size();)
    21     {
    22         if(isdigit(str[i]))
    23         {
    24             LL num = 0;
    25             while(isdigit(str[i]))
    26             {
    27                 num = num*10+str[i]-'0';
    28                 num %= 10000;
    29                 i++;
    30             }
    31             sk.push(num);
    32         }
    33         else if(str[i]=='*')
    34         {
    35             LL num = 0;
    36             i++;
    37             while(isdigit(str[i]))
    38             {
    39                 num = num*10+str[i]-'0';
    40                 num %= 10000;
    41                 i++;
    42             }
    43             int t = sk.top(); sk.pop();
    44             sk.push(num*t%10000);
    45         }
    46         else if(str[i]=='+') i++;
    47     }
    48     while(sk.size()>1)
    49     {
    50         int num1 = sk.top(); sk.pop();
    51         int num2 = sk.top(); sk.pop();
    52         sk.push((num1+num2)%10000);
    53     }
    54     cout<<sk.top()%10000<<"
    ";
    55     
    56     return 0;
    57 }

    跟表达式有关的用Python计算超级简单

    1 import sys #该sys模块提供对解释器使用或维护的某些变量以及与解释器强烈交互的功能的访问。它提供有关python解释器的常量,函数和方法的信息。它可以用于操纵Python运行时环境。
    2 sys.setrecursionlimit(1000000) #sys.setrecursionlimit()方法用于将Python解释器堆栈的最大深度设置为所需的限制。此限制可防止任何程序进入无限递归,否则无限递归将导致C堆栈溢出并使Python崩溃。
    3 print(eval(input().strip()) % 10000) #strip用于去除首尾空格或者回车符

    对比:

    -

  • 相关阅读:
    Serverless 的初心、现状和未来
    父亲的茶杯
    子慕谈设计模式系列(三)
    子慕谈设计模式系列(二)——设计模式六大原则
    子慕谈设计模式系列(一)
    初入angular4——实际项目搭建总结
    欲练JS,必先攻CSS——前端修行之路
    运用google-protobuf的IM消息应用开发(前端篇)
    “倔驴”一个h5小游戏的实现和思考(码易直播)——总结与整理
    【猿分享第10期】微信小程序Meetup扫盲专场回顾(转载)
  • 原文地址:https://www.cnblogs.com/jiamian/p/12806470.html
Copyright © 2011-2022 走看看