贤鱼的刷题日常--P1981 [NOIP2013 普及组] 表达式求值

简介: 🍀学习表达式求值题目
🏆今日学习目标:
🍀学习表达式求值题目
✅创作者:贤鱼
⏰预计时间:25分钟

请添加图片描述

@TOC

题目

给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入格式
一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 “+” 和乘法运算符 “×”,且没有括号,所有参与运算的数字均为 0 到 2^31 之间的整数。
输入数据保证这一行只有 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≤0≤ 表达式中加法运算符和乘法运算符的总数 ≤100。
对于 80% 的数据,0≤0≤ 表达式中加法运算符和乘法运算符的总数 ≤1000。
对于 100% 的数据,0≤0≤ 表达式中加法运算符和乘法运算符的总数 ≤100000。

思路

题目中明确说明了只有 和+,优先众所周知,所以我们可以优先处理 ,假设这个是 ,那么他前后的数字就要相乘,我们让i+1=i*(i+1)个数字,这样子可以避免连续乘号导致出现错误,我们在最后再将所有答案全部相加就好了(注意题目要求只输出4位,所以我们每次处理%10000和最后答案%10000就可以完美处理)

AC代码

#include<cmath>
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int ans=0,a;
char s[100001000];//储存输入内容(貌似不需要这么大。。)
char fh[101010000];
int num[101010100];//上头的fh是单独储存所以的运算符,这个num是储存所有的数字
int main(){
    cin>>s;
    int nn=0,f=0;
    int len=strlen(s);
    for(int i=0;i<=len;i++){
        if(isdigit(s[i])){//这个的意思是判断是不是数字
            a=a*10+s[i]-'0';//储存数字
        }else{
            nn++;
            num[nn]=a;
            f++;
            fh[f]=s[i];//这里放入数字和符号,记得数字清零
            a=0;
        }
    }
    for(int i=1;i<=f;i++){
        if(fh[i]=='*'){    //如果是*,就按照上文所说处理
             num[i+1]=num[i]*num[i+1];
             num[i]=0;
             num[i+1]%=10000;//每一次都摸一下

        }
    }
    
    for(int i=1;i<=nn;i++){
        ans+=num[i];
    }
    cout<<ans%10000;//输出的时候摸一下,前导零自动就排除掉了,不需要单独处理
}

🏆结束语:如果有需要可以订阅一下专栏,持续更新内容!

请添加图片描述

相关文章
|
5月前
【洛谷 P1980】[NOIP2013 普及组] 计数问题 题解(取余)
NOIP2013普及组计数问题,求区间[1, n]内数字x出现的次数。输入为n和x,输出x的出现次数。样例输入11 1,输出4。代码通过逐位检查每个数是否等于x来计数,适用于$n\leq10^6$,$0\leq x\leq 9$的情况。
68 0
|
5月前
|
C++
【洛谷 P1307】[NOIP2011 普及组] 数字反转 题解(字符串)
**NOIP2011普及组题目:给定整数N,反转其位得到新数。新数首位非0(除非N=0)。输入0时直接输出0,其他情况输出反转后的数,考虑负数及前导0。提供的C++代码实现通过读入字符串,反转数字顺序并处理符号和前导0。**
33 0
|
5月前
|
存储
【洛谷 P2141】[NOIP2014 普及组] 珠心算测验 题解(集合+多重循环)
**NOIP2014普及组的珠心算测验题要求参赛者找出给定集合中多少个数可表示为其他两个不同数的和。输入含n个正整数,输出满足条件的数的个数。样例输入4个数,输出2,因1+2=3且1+3=4。代码利用集合存储和,遍历所有数对组合,当找到匹配和时插入集合,最后输出集合大小。注意数据规模为n≤100,数不超过10,000。**
125 0
|
5月前
【洛谷 P1035】[NOIP2002 普及组] 级数求和 题解(循环)
**NOIP2002普及组题目:求级数$S_n=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}$超过$k$的最小$n$。给定$1\leq k\leq 15$,输出满足$S_n&gt;k$的$n$。输入$1$个整数$k$,输出相应$n$。例如,输入$1$,输出$2$。代码中使用double确保精度,通过累加求和判断条件找到$n$。**
37 0
|
5月前
|
C++
【洛谷 P1059】[NOIP2006 普及组] 明明的随机数 题解(集合)
**NOIP2006普及组题目**,明明需生成不重复的1-1000间随机整数,输入含两行:第一行是整数N(≤100),第二行是N个随机数。输出两行,第一行是唯一数的个数M,第二行是排序后的唯一数。示例:输入10个数含重复,输出8个不同数排序后结果。解题方法:利用C++的`set`进行去重和排序。
61 0
[算法刷题题解笔记] 洛谷 P1008 [NOIP1998 普及组] 三连击 [枚举|模拟]
[算法刷题题解笔记] 洛谷 P1008 [NOIP1998 普及组] 三连击 [枚举|模拟]
【2012NOIP普及组】T1. 质因数分解 试题解析
【2012NOIP普及组】T1. 质因数分解 试题解析
|
关系型数据库 MySQL 数据库
|
程序员
贤鱼的刷题日常--P1022 [NOIP2000 普及组] 计算器的改良--题目详解
🍀学习了解P1022 [NOIP2000 普及组] 计算器的改良
311 0
贤鱼的刷题日常--P1022 [NOIP2000 普及组] 计算器的改良--题目详解