关于40585自幂数判断程序y=0时temp值异常的技术咨询
问题原因解析
核心问题出在你对temp的初始值和内层循环执行逻辑的误解:
- 当迭代到
x=40时,y = x%10 = 0,此时temp的初始值是1,而非你以为的0。 - 内层
for循环的条件是i = y; i > 1; i--,也就是i从0开始,0 > 1的条件不成立,循环体完全不会执行,temp不会被任何乘法操作修改,始终保持初始值1。
你预期temp变为0,但代码中没有任何将temp设为0的逻辑:
- 当
y≥2时,循环执行乘法,计算y!; - 当
y=1时,循环条件i>1不成立,temp保持1(符合数学上1! = 1的定义); - 当
y=0时,代码逻辑等价于计算0!,而数学上0! = 1,所以temp最终是1,这导致output比你预期的多了1,最终结果为40585而非40584。
如果需要让y=0时temp为0(比如业务需求不遵循阶乘定义),可以添加判断逻辑:
int temp = 1; int y = x % 10; if (y == 0) { temp = 0; } else { for (int i = y; i > 1; i--) temp *= i; }
内容的提问来源于stack exchange,提问作者SHON
相关产品推荐
相关产品推荐

