zoukankan      html  css  js  c++  java
  • 洛谷 P1981 表达式求值

    题目链接:https://www.luogu.org/problem/P1981

    题目描述

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

    输入格式

    一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“×”,且没有括号,所有参与运算的数字均为 0 到 2^31-1 之间的整数。

    输入数据保证这一行只有0-9+、×这 12种字符。

    输出格式

    一个整数,表示这个表达式的值。

    注意:当答案长度多于 4 位时,请只输出最后4 位,前导0 不输出。

    输入输出样例

    输入 #1
      1+1*3+4
    输出 #1
      8
    输入 #2
      1+1234567890*1
    输出 #2
      7891
    输入 #3
      1+1000000003*1
    输出 #3
      4

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

    分析

    每个运算数都不超过int的表示范围,可以直接输入。

    至于拆分运算数和运算符,原本我还担心直接输入无法自动拆分,其实没有问题。参见如下代码:(参考出处https://www.cnblogs.com/xiaoyezi-wink/p/11043323.html

     1 #include<iostream>
     2 #include<stdio.h>
     3 using namespace std;
     4 const int mod=1e4;
     5 
     6 int x,y,k,ans=0;
     7 char fu;
     8 
     9 int main()
    10 {
    11 
    12     scanf("%d",&x);
    13     x=x%mod;
    14     while(scanf("%c",&fu)!=EOF)
    15     {
    16         if(fu=='
    ') break;
    17         scanf("%d",&y);
    18         y=y%mod;
    19         if(fu=='+')
    20         {
    21             ans=(ans%mod+x%mod)%mod;
    22             x=y;
    23         } 
    24         else if(fu=='*')
    25         {
    26             x=x%mod*y%mod;
    27         }
    28     }
    29     ans=(ans%mod+x%mod)%mod;
    30     printf("%d",ans);
    31     return 0;
    32 }

    原文代码:

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 const int mod=1e4;
     6 
     7 int x,y,k,ans=0;
     8 char fu;
     9 
    10 int main()
    11 {
    12     cin>>x;
    13     x=x%mod;
    14     while(cin>>fu)
    15     {
    16         if(fu=='
    ') break;
    17         cin>>y;
    18         y=y%mod;
    19         if(fu=='+')
    20         {
    21             ans=(ans%mod+x%mod)%mod;
    22             x=y;
    23         }
    24           
    25         if(fu=='*')
    26         {
    27             x=x%mod*y%mod;
    28         }
    29 
    30     }
    31     
    32     ans=(ans%mod+x%mod)%mod;
    33     
    34     printf("%d",ans);
    35 
    36     return 0;
    37 }
    View Code

    其实本文可以参考一下这两篇文章的处理方式:(仅做借鉴)

    https://www.cnblogs.com/huashanqingzhu/p/3465929.html

    https://www.cnblogs.com/huashanqingzhu/p/11783778.html

  • 相关阅读:
    webbrowser在vb中叫
    linux小记之安装bin或deb程序
    9011,9012,9013,9014,8050,8550三极管的区别
    中兴v880刷机全过程。原创亲测
    Slackware的启动(init)过程
    sysvinit
    rc.S 分析【转自CSDN 】
    linux 解压rar zip
    slackware启动脚本详解
    工作
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/11783812.html
Copyright © 2011-2022 走看看