C语言作业中的Bugs
常识
最大公约数(GCD)
辗转相除法(欧几里得算法)
// ChatGPT
假设我们要计算两个正整数 a 和 b 的最大公约数,步骤如下:
- 用较大的数 a 除以较小的数 b,得到余数 r。
- 如果余数 r=0,则 b 就是 a 和 b 的最大公约数。
- 如果 r ≠ 0,则将 a 赋值为 b,将 b 赋值为 r,重复步骤 1,直到余数为 0。
通过不断用较大的数除以较小的数,可以不断缩小问题规模,最终得到最大公约数。
最小公倍数(LCM)
LCM = (a * b) / GCD(a, b)
判断素数
注意: 1不是素数!2是素数!
// ChatGPT
判断方法:
- 简单方法:从 2 到 n−1 的每个数都尝试除 n。如果 n 能被其中任何一个数整除,那么 n 就不是素数。
- 优化方法:只需检查从 2 到 根号n 的数即可。因为如果一个数 n 能被大于 根号n 的数整除,则它必定也能被小于 根号n 的数整除。检查从 3 到 sqrt(n) 的奇数.
完美的素数
如果一个素数是完美的素数,当且仅当它的每一位数字之和也是一个素数。
三边求三角形面积
海伦公式
XOR运算
//ChatGPT
异或运算是二进制中的一种逻辑操作,符号是 ^
对于两个二进制位(bit):
如果两个位 相同,结果为 0
如果两个位 不同,结果为 1
异或的特点
对称性:
A⊕B=B⊕A自反性:
A⊕A=0还原性:
(A⊕B)⊕B=A
这条特性特别重要,它使异或运算常被用于加密和解密。
数组
清空缓存区
连续输入时要记得清空缓存区,否则就会出现奇怪的bug
使用scanf()
scanf("%*[^\n]"); scanf("%*c");
使用while()
while((ch = getchar()) != ‘\n’ && ch != EOF);
万能语句
使用fflush()
fflush(stdin);
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 QingChenyou | Luda' Blog!