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

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.lryc.cn/news/2379673.html

相关文章:

  • SQLMesh 模型管理指南:从创建到验证的全流程解析
  • HarmonyOS AVPlayer 音频播放器
  • ⭐️白嫖的阿里云认证⭐️ 第二弹【课时1:提示词(Prompt)技巧】for 「大模型Clouder认证:利用大模型提升内容生产能力」
  • Filament引擎(一) ——渲染框架设计
  • c++从入门到精通(六)--特殊工具与技术-完结篇
  • JDK 1.8 全解析:从核心特性到企业实战的深度实践
  • MCP实战:在扣子空间用扣子工作流MCP,一句话生成儿童故事rap视频
  • 分布式微服务系统架构第134集:笔记1运维服务器经验,高并发,大数据量系统
  • 【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发
  • SpringBoot基础项目搭建
  • Rust 学习笔记:关于 HashMap 的练习题
  • C语言-8.数组
  • Kotlin Android单元测试MockK指南
  • C# lock
  • 《算法导论(第4版)》阅读笔记:p83-p85
  • Go 后端中双 token 的实现模板
  • 【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架
  • 第六天——贪心算法——字符串分隔
  • Python 条件语句详解
  • 前端获取用户的公网 IP 地址
  • 在Maven中替换文件内容的插件和方法
  • 符合Python风格的对象(再谈向量类)
  • 云电竞服务器 工作原理
  • 【数据结构】线性表--队列
  • [Vue3]语法变动
  • Ubuntu服务器开启SNMP服务 监控系统配置指南 -优雅草星云智控简易化操作
  • linux本地部署ollama+deepseek过程
  • 从零开始实现大语言模型(十五):并行计算与分布式机器学习
  • OpenCV进阶操作:指纹验证、识别
  • 网络安全-等级保护(等保) 2-5 GB/T 25070—2019《信息安全技术 网络安全等级保护安全设计技术要求》-2019-05-10发布【现行】