NOIP2013普及组 T2 表达式求值
OJ地址:洛谷P1981 CODEVS 3292
正常写法是用栈
#include<iostream>
#include<algorithm>
#include<cmath>
#include<stack>
#include<cstring>
#include<cstdio>
using namespace std;
char c[]; stack<long long>num;//数
stack<char>sy;//符号
void mth(){//运算
int a,b;
char ch;
b=num.top();
num.pop();
a=num.top();
num.pop();
ch=sy.top();
sy.pop();
switch(ch){
case '+': num.push((a+b)%);break;
case '*': num.push((a*b)%);break;
}
return;
}
int cmp(int ch){//优先级判断,没有严谨验证过,初步测试没有问题
if(sy.empty() || sy.top()=='(')return ;
if(ch=='+' || ch=='-')return ;
if(ch=='*' && sy.top()=='*')return ;
return ; int main(){
gets(c);
int len=strlen(c);
c[len]=')';
sy.push('(');
int i; if(c[]<''||c[]>''){
num.push();
} for(i=;i<=len;i++){
if(c[i]=='('){
sy.push('(');
continue;
}
if(c[i]>='' && c[i]<='')
{
long long x=;
while(c[i]>='' && c[i]<=''){
x=x*+c[i]-'';
i++;
}
i--;
num.push(x);
continue;
}
if(c[i]==')'){
while(sy.top()!='(')mth();
sy.pop();
continue;
} while(cmp(c[i]))mth();
sy.push(c[i]);
}
while(!sy.empty())mth();
cout<<num.top()%;
// printf("%d ",num.top()%10000);
return ;
}
正常写法
然而还有超诡异的解法
/*NOIP2013普及组t2 洛谷P1981 表达式求值*/
/**/
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
char last;
char c;
int x=;
int a=,b=;
int sum=;
int main(){
int i,j;
bool flag=;
do{
if(cin>>c);
else{
flag=;
c='+';//相当于在整个串最后补个+号,以完成全部运算
}
if(c>='' && c<='')x=x*+c-'';
else{
a=x;
x=;
}
if(c=='*'){
last=;
b=(a*b)%;
}
if(c=='+'){
if(last){
a=(a*b)%;
sum=(sum+a)%;
b=;
last=;
}
else sum+=a;
} }while(flag==);
printf("%d",sum%);
return ;
}
诡异写法
NOIP2013普及组 T2 表达式求值的更多相关文章
- NOIP 普及组 2013 表达式求值
传送门 https://www.cnblogs.com/violet-acmer/p/9898636.html 题解: 哇哇哇,又是一发暴力AC. 用字符数组存储表达式. 然后将表达式中的 数字 与 ...
- 【NOIP】普及组2011 表达式的值
[算法]动态规划+后缀表达式 [题解] 先把算式转为后缀表达式后进行DP 令f[s][0]表示使表达式答案为0的方案数 f[s][1]表示使表达式答案为1的方案数 (加法) f[a+b][1]=f[a ...
- [NOIP2013] 普及组
计数问题 纯模拟 #include<cstdio> #include<iostream> using namespace std; int main(){ int n,x; c ...
- NOIP2013普及组 -SilverN
T1 计数问题 题目描述 试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1 到 11 中,即在 1.2.3.4.5.6.7.8.9.10.11 中, ...
- [NOIP2013 普及组] 表达式求值
[NOIP2013 普及组] 表达式求值 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. Input 一行,为需要你计算的表达式,表达式中只包含数字.加法运算符"+" ...
- NC16539 [NOIP2013]表达式求值
NC16539 [NOIP2013]表达式求值 题目 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入描述 输入仅有一行,为需要你计算的表达式,表达式中只包含数字.加法运 ...
- 【NOIP2013 普及组】车站分级
[NOIP2013 普及组]车站分级 一.题目 [NOIP2013 普及组]车站分级 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 0 [提交][状态][讨论版] 题目描述 ...
- P7324 [WC2021] 表达式求值
P7324 [WC2021] 表达式求值 闲话 WC2021 我只得了 20 分,三道题总共 20 分.我是下场了突然后知后觉这件事的,主要原因是我开了 C++11,然后 T1 T2 都没分了.在洛谷 ...
- nyoj305_表达式求值
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...
随机推荐
- ViewPager和Fragment的组合使用
如图是效果图用的是Viewpager和fragment来实现的主界面 不过其中的预加载我没有解决 如下是代码代码比较简单 package com.ithello.dingding; import ja ...
- Linux基础学习系列(一)
Linux是一种类似于UNIX的操作系统,由Linus Torvalds于1991年在minix操作系统的基础创建.Linux凭借其优良特性已经成为目前发展潜力最大的操作系统. Linux的版本有内核 ...
- 那些教程没有的php3-命名空间
php.net (PHP 5 >= 5.3.0, PHP 7) 定义命名空间 虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和tra ...
- php实现快速排序
下午练习时候,把经典排序快速排序做了,以下是我的代码 <?php /** * Created by PhpStorm. * User: Administrator * Date: 16-8-29 ...
- 如何选择RabbitMQ的消息保存方式?
RabbitMQ对于queue中的message的保存方式有两种方式:disc和ram.如果采用disc,则需要对exchange/queue/delivery mode都要设置成durable模式. ...
- 跨平台的 SQL 客户端
The major update to SQL client was to move to the .NET Core networking libraries instead of the nati ...
- javascript Array 方法学习
原生对象Array学习 Array.from() 从类似数组的对象或可迭代的对象返回一个数组 参数列表 arraylike 类似数组的对象或者可以迭代的对象 mapfn(可选) 对对象遍历映 ...
- [js开源组件开发]图片放大镜
图片放大镜 一般情况下,手机由于屏幕太小,会有图片上看不清的问题,所以我就做了一个放大镜的js效果,支持pc和移动端.它的原理是利用的backgroundsize来实现的,所以你的浏览器首先要支持这个 ...
- 通过SMATFORMS打印程序的参考模板
REPORT ydemo_rick_print. CONSTANTS: c_lable_smartforms TYPE tdsfname VALUE 'ZCUSTOMER'. "标签sma ...
- Android 开发组件
每一个应用程序都有自己独立的运行沙盒(授予应用程序代码的访问权) Android操作系统是一个多用户的Linux系统,其中的每一个应用程序都是一个独立的用户. 系统会为每一个应用程序分配一个唯一的Li ...