算法竞赛中常用的数据处理库函数

算法竞赛中常用的数据处理库函数

以下是算法竞赛(如蓝桥杯、牛客网)中常用的 C++11 标准数学库函数,按函数名分类整理,包含使用方式、头文件及功能说明:


一、基础数学运算

函数名 使用方式及返回值 头文件 功能描述
std::abs(x) double abs(double x); (支持整型/浮点型) <cmath> 返回 x 的绝对值
std::sqrt(x) double sqrt(double x); <cmath> 返回 x 的平方根(需 x ≥ 0
std::pow(x, y) double pow(double x, double y); <cmath> 返回 x^y(结果为浮点型)
std::hypot(x, y) double hypot(double x, double y); <cmath> 返回 √(x² + y²)(两点间欧氏距离)

二、指数与对数函数

函数名 使用方式及返回值 头文件 功能描述
std::exp(x) double exp(double x); <cmath> 返回 e^x(自然指数)
std::log(x) double log(double x); <cmath> 返回 ln(x)(自然对数,需 x > 0
std::log10(x) double log10(double x); <cmath> 返回 log₁₀(x)(以 10 为底)
std::log2(x) double log2(double x); <cmath> 返回 log₂(x)(以 2 为底,C++11 新增)

三、三角函数(参数为弧度)

函数名 使用方式及返回值 头文件 功能描述
std::sin(x) double sin(double x); <cmath> 返回 x 的正弦值
std::cos(x) double cos(double x); <cmath> 返回 x 的余弦值
std::tan(x) double tan(double x); <cmath> 返回 x 的正切值
std::atan2(y, x) double atan2(double y, double x); <cmath> 返回 y/x 的反正切(四象限,弧度值)

四、取整与舍入函数

函数名 使用方式及返回值 头文件 功能描述
std::ceil(x) double ceil(double x); <cmath> 返回不小于 x 的最小整数(向上取整)
std::floor(x) double floor(double x); <cmath> 返回不大于 x 的最大整数(向下取整)
std::round(x) double round(double x); <cmath> 返回最接近 x 的整数(四舍五入,C++11 新增)
std::trunc(x) double trunc(double x); <cmath> 截断小数部分,返回整数部分(向零取整)这个应该可以直接用强制类型转换

五、其他实用函数

函数名 使用方式及返回值 头文件 功能描述
std::cbrt(x) double cbrt(double x); <cmath> 返回 x 的立方根(C++11 新增)
std::fmod(x, y) double fmod(double x, double y); <cmath> 返回 x/y 的浮点余数(符号与 x 相同)
std::remainder(x, y) double remainder(double x, double y); <cmath> 返回 IEEE 余数(符号与 x/y 的商相同)
std::max(a, b) T max(T a, T b);T 为可比较类型) <algorithm>注意头文件 返回 ab 中的较大值
std::min(a, b) T min(T a, T b);T 为可比较类型) <algorithm>注意头文件 返回 ab 中的较小值

六、注意事项

  1. 数据类型一致性

    • std::abs 支持多种类型(如 int, double),但需确保参数类型正确。
    • std::pow 返回浮点数,整型运算需显式转换:(int)pow(2, 3)
  2. C++11 特有函数

    • std::log2, std::round, std::cbrt 等需确认评测环境支持 C++11。
  3. 性能优化

    • 避免在循环中频繁调用 std::pow,手写快速幂更高效。
    • 优先用 std::hypot 而非 sqrt(x*x + y*y)(避免溢出)。
  4. 非标准函数

    • __gcd(GCC 扩展)可能不可移植,建议手写欧几里得算法。
相关推荐
无限进步_17 分钟前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
C+-C资深大佬34 分钟前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法
cwplh36 分钟前
DP 优化二:斜率优化 DP
算法·动态规划
Hcoco_me1 小时前
大模型面试题90:half2,float4这种优化 与 pack优化的底层原理是什么?
人工智能·算法·机器学习·langchain·vllm
浅念-1 小时前
链表经典面试题目
c语言·数据结构·经验分享·笔记·学习·算法
Python算法实战1 小时前
《大模型面试宝典》(2026版) 正式发布!
人工智能·深度学习·算法·面试·职场和发展·大模型
菜鸟233号2 小时前
力扣213 打家劫舍II java实现
java·数据结构·算法·leetcode
狐573 小时前
2026-01-18-LeetCode刷题笔记-1895-最大的幻方
笔记·算法·leetcode
Q741_1473 小时前
C++ 队列 宽度优先搜索 BFS 力扣 662. 二叉树最大宽度 每日一题
c++·算法·leetcode·bfs·宽度优先
Pluchon3 小时前
硅基计划4.0 算法 动态规划进阶
java·数据结构·算法·动态规划