25.5.27学习总结

快速读入:

cpp 复制代码
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()

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

2. int x = 0, f = 1;

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

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

3. char ch = getchar();

  • char ch = getchar(); : 从标准输入(通常是键盘)读取一个字符,并将其赋值给字符变量 chgetchar() 是 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' 时,整个条件才为真,循环才会执行。

cpp 复制代码
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(符号),得到带符号的整数。

快速输出:

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

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

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

cpp 复制代码
 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。这确保了数字是从高位到低位输出的。

cpp 复制代码
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() 函数将字符输出到标准输出。

相关推荐
西岸行者6 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习