当前位置: 首页 > web >正文

C++.备考知识点

C++备考知识点

  • 1. 循环结构与等差数列求和
    • 1.1 逐天累加实现方法
    • 1.2 等差数列求和公式优化
    • 2.1 数字转字符串方法
    • 2.2 首尾字符交换实现
    • 2.3 去除前导零技巧
    • 3.1 异或运算基本性质
    • 3.2 找出出现奇数次的数
      • 问题分析
      • 示例代码
      • 输出结果
      • 扩展应用
    • 4.1 字符位移量计算
      • 问题分析
      • 示例代码
      • 输出结果
      • 扩展应用
    • 4.2 步骤奇偶性判断
      • 问题分析
      • 示例代码
      • 输出结果
      • 扩展应用
    • 4.3 模26处理循环移位
      • 问题分析
      • 示例代码
      • 输出结果
      • 扩展应用
    • 5.1 取模运算原理
      • 特点
      • 应用场景
      • 示例代码
      • 扩展应用
    • 5.2 4 % 12 的计算过程
      • 示例代码
      • 输出结果
      • 扩展应用
    • 6.1 转义字符的作用
      • 常见的转义字符
      • 转义字符的应用场景
      • 示例代码
      • 输出结果
    • 6.2 char a[] = "hello\nworld" 的输出分析
      • 示例代码
      • 输出结果
      • 分析
      • 扩展应用
    • 7.1 二进制转十进制方法
      • 手动计算方法
      • 使用C++标准库函数
      • 输出结果
      • 扩展应用
    • 7.2 十六进制转十进制方法
      • 手动计算方法
      • 使用C++标准库函数
      • 输出结果
      • 扩展应用
    • 7.3 二进制与十六进制加法运算
      • 示例计算
      • 使用C++实现
      • 输出结果
      • 扩展应用
    • 8.1 布尔代数基本规则
    • 8.2 选项 D 的化简过程
      • 问题描述
      • 化简过程
      • 示例代码
      • 输出结果
      • 分析

1. 循环结构与等差数列求和

1.1 逐天累加实现方法

逐天累加是一种常见的循环结构应用,用于计算累计值。在C++中,可以通过for循环或while循环实现。例如,计算每天阅读的页数,直到总页数超过或等于n,代码如下:

int total_pages = 0;
int daily_pages = 1; // 每天阅读的页数
int n = 100; // 目标总页数while (total_pages < n) {total_pages += daily_pages;daily_pages++; // 每天阅读的页数递增
}

这种方法简单直观,但效率较低,尤其是当n较大时,循环次数会很多。

1.2 等差数列求和公式优化

等差数列求和公式可以显著优化逐天累加的过程。等差数列的求和公式为:
[
S_n = \frac{n}{2} \times (a_1 + a_n)
]
其中,n是项数,a_1是首项,a_n是末项。对于逐天累加问题,首项a_1为1,末项a_nn,项数n可以通过公式求解:
[
n = \sqrt{2 \times \text{总页数}}
]
然后使用求和公式计算总页数,代码如下:

#include <cmath>
int total_pages = 100; // 目标总页数
int n = static_cast<int>(std::sqrt(2 * total_pages)); // 项数
int sum = n * (n + 1) / 2; // 等差数列求和公式if (sum < total_pages) {n++;sum = n * (n + 1) / 2;
}

这种方法通过数学公式减少了循环次数,提高了计算效率。# 2. 字符串操作与前导零处理

2.1 数字转字符串方法

在C++中,将数字转换为字符串有多种方法,每种方法都有其适用场景和优缺点。

  • 使用std::to_string函数:这是最简单直接的方法,适用于所有基本数据类型(如intdouble等)。例如:

    int num = 123;
    std::string str = std::to_string(num);
    

    这种方法简单易用,但可能会引入不必要的字符(如浮点数的尾部零),需要额外处理。

  • 使用std::ostringstream:这种方法更灵活,可以处理复杂的格式化需求。例如:

    std::ostringstream oss;
    oss << 123;
    std::string str = oss.str();
    

    这种方法可以方便地将多个不同类型的数据拼接成字符串,但性能略逊于std::to_string

  • 使用sprintf函数:这是一种C语言风格的函数,可以将格式化的数据写入字符数组。例如:

    char buffer[10];
    sprintf(buffer, "%d", 123);
    std::string str(buffer);
    

    这种方法性能较高,但需要手动管理缓冲区大小,容易出错。

2.2 首尾字符交换实现

交换字符串的首尾字符是字符串操作中的一个常见需求,可以通过以下步骤实现:

  • 获取字符串的首尾字符:通过索引访问字符串的第一个字符和最后一个字符。
  • 交换字符:使用临时变量或直接交换字符。
  • 更新字符串:将交换后的字符重新赋值给字符串。

示例代码如下:

std::string str = "hello";
if (str.length() > 1) {char temp = str[0];str[0] = str[str.length() - 1];str[str.length() - 1] = temp;
}

这种方法简单直观,但需要注意字符串长度小于2的情况,避免访问无效内存。

2.3 去除前导零技巧

去除字符串中的前导零是一个常见的字符串处理问题,可以通过以下方法实现:

  • 使用std::string::find_first_not_of方法:找到第一个非零字符的位置,然后截取字符串。例如:

    std::string str = "00123";
    size_t pos = str.find_first_not_of('0');
    if (pos != std::string::npos) {str = str.substr(pos);
    } else {str = "0"; // 如果全是零,返回"0"
    }
    

    这种方法简洁高效,适用于大多数情况。

  • 手动遍历字符串:逐个检查字符,直到找到第一个非零字符,然后截取字符串。例如:

    std::string str = "00123";
    size_t pos = 0;
    while (pos < str.length() && str[pos] == '0') {pos++;
    }
    if (pos == str.length()) {str = "0"; // 如果全是零,返回"0"
    } else {str = str.substr(pos);
    }
    

    这种方法虽然稍显繁琐,但可以更好地控制处理过程。

  • 使用std::stringstream:将字符串转换为数字,再转换回字符串,自动去除前导零。例如:

    std::string str = "00123";
    std::stringstream ss;
    ss << std::stoi(
http://www.xdnf.cn/news/7153.html

相关文章:

  • Milvus向量数据库
  • Apache Spark:大数据处理与分析的统一引擎
  • iOS 内存分区
  • 聚类算法K-means和Dbscan的对比
  • Blender建小房子流程
  • 符合Python风格的对象(再谈向量类)
  • Adapter适配器模式
  • 10.13 LangChain工具调用实战:@tool装饰器+小样本提示,日处理10w+调用秘籍
  • inverse-design-of-grating-coupler-3d
  • 大模型在胫骨平台骨折预测及治疗方案制定中的应用研究
  • linux下的 xargs命令使用详解
  • GC全场景分析
  • tensorflow图像分类预测
  • matlab分段函数
  • 第二章:安卓端启动流程详解与疑难杂症调试手册
  • Open CASCADE学习|几何体切片处理:OpenMP与OSD_Parallel并行方案深度解析
  • 【Linux】简易版Shell实现(附源码)
  • 1.QPushBotton 以及 对象树
  • Redis学习打卡-Day3-分布式ID生成策略、分布式锁
  • 【Bluedroid】蓝牙HID DEVICE错误报告处理全流程源码解析
  • 从坏道扫描到错误修复:HD Tune实战指南
  • 学习黑客Active Directory 入门指南(三)
  • 07 负载均衡
  • 使用Next.js优化静态网站:以书法字体生成器为例
  • 老旧设备升级利器:Modbus TCP转 Profinet让能效监控更智能
  • 计算机图形学中MVP变换的理论推导
  • 创建型:单例模式
  • 【Retinanet】训练自己的数据集
  • 济南国网数字化培训班学习笔记-第三组-1-电力通信传输网认知
  • node 后端和浏览器前端,有关 RSA 非对称加密的完整实践, 前后端匹配的代码演示