• 牛客算法周周练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用于去除首尾空格或者回车符

    对比:

    -

  • 相关阅读:
    SSH 免密登录配置
    Hadoop 2.7.2 集群安装配置
    将oracle数据库中数据写入excel文件
    PLSQL提交请求集
    oracle会计工作总结,EBS 创建会计科目 小结
    将oracle数据库中数据写入excel文件
    如何成为一名优秀的工程师(听讲座有感) Winema
    基于W5300的嵌入式以太网接口设计 Winema
    Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换
    VMware 11安装Mac OS X 10.10 及安装Mac Vmware Tools.
  • 原文地址:https://www.cnblogs.com/jiamian/p/12806470.html
Copyright © 2020-2023  润新知