数据类型补充

#include <iostream>
using namespace std;
int main() {
  cout << 1.0 / 0.0 << endl;
  cout << 0.0 / 0.0 << endl;
}

输出结果

inf
nan

IEEE 754 浮点数标准有如下规定:

  • 当一个非零的有限数除以零时:若除数为正数,结果为正无穷,若除数为负数,结果为负无穷

    • $\displaystyle \lim_{x \to 0^+} \frac{1}{x} = +\infty \quad \text{(正无穷)}$
    • $\displaystyle \lim_{x \to 0^-} \frac{1}{x} = -\infty \quad \text{(负无穷)}$
  • 0.0/0.00.0 / 0.0 属于未定义行为,规定结果为 NaN,确保数值运算的稳定性

数学

对于整数 a a 和非零整数 b b ,根据欧几里得除法定理,我们可以写成:

a=kb+ra = kb + r

其中:

  • k=ab k = \lfloor \frac{a}{b} \rfloor 是商的整数部分,
  • 余数 r r 满足 0r<b 0 \leq r < |b|

那么余数可以用以下式子表达

r=aab×br = a - \lfloor\frac{a}{b}\rfloor \times b

例题 - 浮点数取余

点击跳转

直接使用 % 符号无法进行,采用如上表达式来进行求解。

预处理

有些题目数据并不是读入即可使用,而是需要进行如排序之类的预处理操作,使得数据呈现有序。

例题 - 判断三角形

点击跳转

本题需要根据三边关系判断三角形的形状,但是三条边是随机给出的。

预先处理三条边的大小关系,可以拿到两条短边和第三条长边,之后只需要根据勾股定理依次判断是否是锐角、直角、钝角即可。

如果不这么处理,分支语句要写很长,代码量很大。