C语言常见题型的难点与问题
水仙花束
常见问题:
-
数值范围
N 位正整数的范围:
最小值:
10^(N−1)
最大值:
10^N−1
例如:
N = 3,范围:100 ~ 999
N = 4,范围:1000 ~ 9999 -
数字拆分方法
对一个数 num 拆分每一位:
用临时变量保存原数:temp = num;
取个位数字:digit = temp % 10;
去掉个位:temp = temp / 10;
循环直到 temp == 0 -
次方计算
每个位上的数字要计算 N 次方,不是固定 3 次方
尽量不要直接用 pow(),容易出现浮点精度错误
推荐自己写循环计算整数次方 -
累加与判断
每次判断新数字时,累加和 sum 必须重新置 0
计算所有位的 N 次方之和 sum
若 sum == num,则为水仙花数 -
常见错误
遍历范围错误,从 0 开始遍历
直接修改原数 num,导致无法比较
sum 没有重置,结果一直累加
固定写成立方(3 次方),不随 N 变化
使用 pow 出现精度误差,判断出错 -
输出要求
按从小到大顺序输出
每个水仙花数占一行
1/n 序列前 N 项和及其变式
一、基础公式
S=1+1/2+1/3+……+1/n;
易错点:
1.必须用 1.0 / i,不能写 1 / i
1/i 是整数除法,结果永远是 0
正确:sum += 1.0 / i;
2.和变量 sum 必须是浮点型
要用 double 或 float
初始值必须为 0
3.循环从 1 开始,到 N 结束
不能从 0 开始(分母不能为 0)
4.输出要用浮点格式
printf("%.2lf", sum);
不能用 %d
二、各类变式注意事项
-
正负交替序列
1-1/2+1/3-1/4+……
用符号变量控制正负,不要写复杂判断
每一项符号翻转:sign = -sign; -
分子不是 1
如:
2/1+2/2+2/3+……
必须写成 2.0 / i 或 (double)a / i
避免整数除法导致结果错误 -
奇偶项分开求和
奇数分母:i = 1; i += 2
偶数分母:i = 2; i += 2
注意循环上限不要超 N -
分母是表达式
如:
1/12+1/23+……
先算分母整体,再做除法
注意括号:1.0 / (i*(i+1))
三、通用避坑总结
1.只要出现分数,一定用 1.0、2.0 这种小数参与运算
2.sum 一定要 double,初始为 0
3.循环变量从 1 开始
4.输出格式一定是 %f 或 %lf
5.交替序列用符号变量最不容易错
6.先想数学公式,再写代码,避免逻辑混乱
浙公网安备 33010602011771号