C++实现1+a+a²+…+aⁿ求和代码未通过检测,请求问题排查
代码缺陷分析:实数几何级数求和程序
咱们来一步步拆解这段代码里的问题,这些问题直接导致程序无法正确完成求和任务:
1. 变量类型不匹配,引发精度丢失或计算错误
- 求和结果
s被定义为int类型,但题目要求计算的是包含实数a的和式,结果必然是实数(比如a=0.5、n=2时,正确结果是1.75)。用整数类型存储会直接截断小数部分,得到错误的整数结果。 - 变量
m被定义为int,但它用来存储a的幂次(初始是a,之后是a²、a³...)。把double类型的a赋值给int的m会直接截断小数部分,比如a=1.5时,m会被赋值为1,后续所有幂次计算全错。
2. 自然数n的输入处理不符合要求
题目明确说明输入的n是自然数,部分定义中自然数包含0(此时和式只有1这一项)。但代码里的while(n <= 0)会强制用户重新输入n,这就排除了n=0的合法情况,导致程序无法处理n=0的场景。
3. 典型错误场景示例
举个简单例子:当输入a=1.5、n=2时,正确结果是1+1.5+2.25=4.75,但代码会把m初始化为1,求和得到1+1+1=3,完全偏离正确结果;如果输入a=0.3、n=1,正确结果是1.3,代码会输出1,直接丢失小数部分。
快速修复建议
- 将
s和m的类型都改为double,确保能存储实数结果和幂次; - 移除
while(n <= 0)的循环(题目已说明输入是自然数,若要做校验,也应允许n=0,此时直接输出1.0即可); - 初始化
m时直接用double类型的a,避免不必要的类型转换错误。
内容的提问来源于stack exchange,提问作者JIM Jordon
相关产品推荐
相关产品推荐

