整数运算器¶
预估时间限制:0.5 秒。内存限制:128 MB。
实际时限以标准程序在目标评测环境的最慢用例中位时间乘以 \(2\) ,按 \(0.5\) 秒向上取整。参考环境见评测说明。
背景故事¶
自动化工厂需要一个小型运算器来解释控制表达式。运算器使用固定的 32 位整数规则,遇到除数为零时报告错误。
形式化问题描述¶
求给定合法表达式的值。数字字面量只能是单个 \(0,\ldots,9\) ,不允许多位数。括号 ( 、) 改变结合顺序。下表从高到低列出运算符优先级。
| 运算符 | 含义 | 结合方向 |
|---|---|---|
一元 + - ~ |
正号、取负、逐位取反 | 从右到左 |
二元 * / % |
乘、除、余数 | 从左到右 |
二元 + - |
加、减 | 从左到右 |
二元 < > |
小于、大于 | 从左到右 |
没有自增、自减运算符;连续的正负号按一元或二元位置分别解释。例如 -~1 等于 -(~1) ,3<2<1 等于 (3<2)<1 .
每个数值都表示一个有符号 32 位整数,范围为 \([-2^{31},2^{31}-1]\) .加、减、乘及一元取负的数学结果对 \(2^{32}\) 取模,再按 32 位补码解释。逐位取反作用于全部 32 位。
除法向零截断,余数满足 \(a\bmod b=a-\operatorname{trunc}(a/b)b\) ,其符号与被除数一致或为零。\(-2^{31}/(-1)\) 的结果也按上述规则环绕成 \(-2^{31}\) ;相应余数为零。关系运算按有符号值比较,结果为 \(0\) 或 \(1\) .
所有操作数均需计算。任一除法或余数运算的除数为零,就输出 Runtime Error ;否则输出最终整数。
输入格式¶
一行一个表达式,不含空格。输入只包含一个表达式。
输出格式¶
输出一行,为计算结果或 Runtime Error .
样例¶
样例 1¶
输入¶
--~~-~(5)+++--(3*(6+7)*4)*2/(2+2)+(1>(((2))))
输出¶
84
样例 2¶
输入¶
3<2<1
输出¶
1
样例 3¶
输入¶
9*9*9*9*9*9*9*9*9*9*9
输出¶
1316288537
样例 4¶
输入¶
5/(7-6-1)
输出¶
Runtime Error
样例解释¶
样例 1 的结果为 84。样例 2 先计算 3<2 得到 0,再计算 0<1 得到 1。样例 3 计算 \(9^{11}\) 后保留低 32 位,得到 1316288537。样例 4 的除数为零。
比较结果仍可作为下一个比较的操作数。
数据范围与保证¶
表达式长度为 \(\ell\) ,\(1\le\ell\le100000\) .保证语法合法;括号与一元运算符的嵌套深度没有额外限制。
规格由 Codex(GPT-6)重新设计:明确 32 位环绕、带符号除法与余数,以及最小负数除以负一的结果。
| 分值比例 | 额外条件 |
|---|---|
| 20% | \(\ell\le30\) |
| 30% | \(\ell\le1000\) |
| 50% | 无额外条件 |