C/C++ 题目技巧总结
字母转换大小写:
1 | a - 'a' + 'A'; |
花费的时间向上取整技巧:
1 | //s是路程,v是速度 |
最大公约数/约分问题*:
1 | // 辗转相除法求最大公约数 |
字符数字转换整型数字做运算
通过将字符 '0'
(其ASCII值为48) 从字符数字 (例如 '1'
, 其ASCII值为49) 中减去,从而得到相应的整型数字值。例如,'1' - '0'
会得到整数值 1
,'2' - '0'
会得到 2
检查质数
从2开始检查,只需要检查到平方根(如果一个数n不是质数,那么它一定可以分解为 n = a × b,a 和 b 中至少有一个小于或等于 √n)
1 | int isPrime(int n) { |
位移26字母
1 | psw[i] = 'a' + (psw[i] - 'a' + n) % 26; |
假设我们要把字母 ‘c’ 往后移动 3 位:
psw[i] - 'a'
- 在上一步的结果上加上位移量n - 例如:2 + 3 = 5 - 这表示从字母表开始数5个位置1
2
3
4
5
6
7
- 把字母转换成 0-25 的数字
- 比如 'c' - 'a' = 2,因为 'c' 是字母表中的第3个字母(从0开始数)
- 这样做的原因是为了方便计算
2. ```
(psw[i] - 'a' + n)% 26
- 最后加上'a'的ASCII值 - 把0-25的数字转回字母 - 比如 'a' + 5 = 'f' 1
2
3
4
5
6
7
8
- 取模运算确保结果在0-25之间
- 如果结果超过25就会回到开头
- 比如如果结果是26,取模后变成0
- 这就实现了字母表的循环效果
4. ```
'a' +
处理不要的字符,持续读取直到结束
getchar()
函数每次调用会读取输入流中的一个字符。
1 | //利用getchar()可以处理不需要的字符 |
读取一篇文章
1 | while ((c = getchar()) != '\n' && c != EOF);//清除缓冲区 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 zyw4259!
评论