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

25.5.27学习总结

快速读入:

inline int read() {int x = 0, f = 1;char ch = getchar();while (ch < '0' || ch > '9') { // 跳过非数字字符if (ch == '-') f = -1;     // 处理负号ch = getchar();}while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0';    // 逐字符转数字ch = getchar();}return x * f;
}

1. inline int read()

  • inlineinline 关键字建议编译器将这个函数的内容直接嵌入到调用它的地方,而不是进行常规的函数调用。 这样做可以消除函数调用带来的开销(例如,压栈、出栈等),从而提高执行效率。 编译器可以选择忽略 inline 建议。

2. int x = 0, f = 1;

  • int x = 0x 用于存储最终读取到的整数值。 初始化为0,因为我们将会逐步构建这个整数。

  • int f = 1f 用于记录符号(正或负)。 初始化为1,表示正数。 如果遇到负号,f 将被设置为 -1。

3. char ch = getchar();

  • char ch = getchar();: 从标准输入(通常是键盘)读取一个字符,并将其赋值给字符变量 ch。 getchar() 是 C 标准库中的一个函数,用于读取单个字符。

4. while (ch < '0' || ch > '9') { ... }

  • while (ch < '0' || ch > '9'): 这个 while 循环用于跳过输入中的所有非数字字符。

    • ch < '0': 检查 ch 是否小于字符 '0'(ASCII码为48)。 这可以检测是否是控制字符、空格、标点符号等。

    • ch > '9': 检查 ch 是否大于字符 '9'(ASCII码为57)。 这检测 ch 是否是字母、符号等。

    • || (逻辑或): 只要 ch 小于 '0' 或大于 '9',整个条件就为真,循环继续执行。

  • if (ch == '-') f = -1;: 如果在非数字字符中遇到了负号 (-),则将 f 设置为 -1,表示读取的数字是负数。

  • ch = getchar();: 在循环的末尾,再次读取一个字符,以便在下一次循环迭代中进行检查。

5. while (ch >= '0' && ch <= '9') { ... }

  • while (ch >= '0' && ch <= '9'): 这个 while 循环用于读取数字字符,并将其转换为整数值。

    • ch >= '0': 检查 ch 是否大于等于字符 '0'。

    • ch <= '9': 检查 ch 是否小于等于字符 '9'。

    • && (逻辑与): 只有当 ch 既大于等于 '0' 又小于等于 '9' 时,整个条件才为真,循环才会执行。

  • x = x * 10 + ch - '0';
  • 这是将字符转换为数字并构建整数的关键步骤。

    • ch - '0': 将字符 '0' 到 '9' 转换为对应的整数值 0 到 9。 例如,如果 ch 是 '5',那么 ch - '0' 的结果就是 5。 这是因为字符在 ASCII 码中有固定的顺序,数字字符是连续的。

    • x * 10: 将当前已构建的整数 x 乘以 10,为新的数字腾出位置。

    • x * 10 + ch - '0': 将转换后的数字添加到 x 的末尾。

  • ch = getchar();: 在循环的末尾,再次读取一个字符,以便在下一次循环迭代中进行处理。

  • return x * f;: 返回最终读取到的整数值。将 x(绝对值)乘以 f(符号),得到带符号的整数。

快速输出:

inline void write(int x) {if (x < 0) {                  // 处理负数putchar('-');x = -x;}if (x >= 10) write(x / 10);   // 递归分解高位putchar(x % 10 + '0');         // 输出当前位
}
inline void write(int x)
  • inlineinline 关键字建议编译器将这个函数的内容直接嵌入到调用它的地方,而不是进行常规的函数调用。 这可以消除函数调用带来的开销(例如,压栈、出栈等),从而提高执行效率。 编译器可以选择忽略 inline 建议。

    if (x < 0) {                  // 处理负数putchar('-');x = -x;}
  • if (x < 0): 这个 if 语句用来处理负数的情况。

  • putchar('-');: 如果 x 是负数,则使用 putchar() 函数输出一个负号 (-) 到标准输出。 putchar() 是 C 标准库中的函数,用于输出单个字符。

  • x = -x;: 将 x 转换为它的绝对值,以便后续处理可以针对正数进行。

 if (x >= 10) write(x / 10);
  • if (x >= 10): 这是一个递归调用,用于处理多位数的整数。 如果 x 大于或等于 10,说明它有多位数字。

  • write(x / 10);: 递归调用 write() 函数,并将 x 除以 10 的结果作为参数传递给它。 这会将 x 的最高位数字“剥离”出来,并递归地输出它。 例如,如果 x 是 123,那么 x / 10 的结果是 12,所以会先输出 12,再输出 3。这确保了数字是从高位到低位输出的。

putchar(x % 10 + '0');
  • putchar(x % 10 + '0');: 这是输出数字的实际步骤。

    • x % 10: 计算 x 除以 10 的余数,得到 x 的个位数字。 例如,如果 x 是 123,那么 x % 10 的结果是 3。

    • + '0': 将整数数字(0 到 9)转换为对应的字符表示。 例如,如果 x % 10 的结果是 3,那么 3 + '0' 的结果就是字符 '3'(ASCII 码为 51)。这是因为字符在 ASCII 码中有固定的顺序,数字字符是连续的。

    • putchar(...): 使用 putchar() 函数将字符输出到标准输出。

http://www.lryc.cn/news/2387607.html

相关文章:

  • 关于vue结合elementUI输入框回车刷新问题
  • vue项目表格甘特图开发
  • Spark 中,创建 DataFrame 的方式(Scala语言)
  • Python----目标检测(MS COCO数据集)
  • 塔能科技:有哪些国内工业节能标杆案例?
  • 图论:floyed算法
  • 嵌入式系统C语言编程常用设计模式---参数表驱动设计
  • OpenCV CUDA模块图像过滤------创建一个行方向的一维积分(Sum)滤波器函数createRowSumFilter()
  • Frequent values/gcd区间
  • 08SpringBoot高级--自动化配置
  • Deep Evidential Regression
  • 「Python教案」循环语句的使用
  • linux快速入门-VMware安装linux,配置静态ip,使用服务器连接工具连接,快照和克隆以及修改相关配置信息
  • 用户配置文件(Profile)
  • ubuntu 制作 ssl 证书
  • Vue组件技术全解析大纲
  • 轻量化开源方案——浅析PdfPatcher实际应用
  • Ansible常用Ad-Hoc 命令
  • [论文阅读]Pandora: Jailbreak GPTs by Retrieval Augmented Generation Poisoning
  • 鸿蒙OSUniApp 制作个性化的评分星级组件#三方框架 #Uniapp
  • 云效流水线Flow使用记录
  • OpenCV CUDA模块图像处理------颜色空间处理之颜色空间转换函数cvtColor()
  • 科技初创企业创新推动商业未来
  • 人工智能文科能学吗?
  • Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
  • 猿大师办公助手WebOffice用二进制数据流在Web前端打开Office文档
  • etcd:高可用,分布式的key-value存储系统
  • AI in Game,大模型能力与实时音视频技术融合,交出AI应用新答卷
  • 欢乐熊大话蓝牙知识11:如何打造一个低功耗蓝牙温湿度传感器?
  • Linux 安装 Remmina