C++实现Strong number问题遇异常:测试用例40585无输出求助
强数求解程序问题排查与修复
问题根源分析
你的程序输入40585时无输出,核心原因有两个:
- 阶乘函数未处理n=0的情况:40585包含数字0,0的阶乘是1,但当前
Factorial函数遇到n=0时,会进入无限递归(因为n永远不等于1,会持续调用Factorial(-1, ...)、Factorial(-2, ...)),最终导致栈溢出,程序崩溃终止,无法输出结果。 - 静态变量sum未重置:
Get函数中的static int sum在第一次调用后会保留值,若多次测试不同输入,后续计算会基于之前的sum累加,导致结果错误,但这不是本次40585无输出的直接原因。
修复方案
- 完善
Factorial函数,添加n=0的处理逻辑,直接返回1(0! = 1)。 - 移除
Get函数中的static修饰符,改用局部变量存储sum,确保每次调用时重新初始化,避免多次调用的累加问题。
修改后的代码
#include <iostream> using namespace std; int Get(int n); int Factorial(int n); int main() { system("cls"); int n; cout << "Enter. \n"; cin >> n; if (n == Get(n)) { cout << "True. \n"; } else { cout << "False. \n"; } return 0; } int Get(int n) { int sum = 0; if (n / 10) { sum += Get(n / 10); } sum += Factorial(n % 10); return sum; } int Factorial(int n) { if (n == 0 || n == 1) { return 1; } else { return n * Factorial(n - 1); } }
代码说明
- 优化后的
Factorial函数:直接处理n=0和n=1的情况,返回1,其他场景用常规递归计算阶乘,彻底避免无限递归问题。 - 优化后的
Get函数:去掉静态sum,改用局部变量,递归调用时累加子问题的结果,确保每次计算完全独立,不受之前调用的影响。
修改后输入40585时,程序会正确计算各数字的阶乘之和(4!+0!+5!+8!+5! = 24+1+120+40320+120 = 40585),输出True.。
内容的提问来源于stack exchange,提问作者cherriedy
相关产品推荐
相关产品推荐

