C++中的强数问题,但我的代码有问题[已关闭]

yrdbyhpb  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(130)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
5天前关闭。
Improve this question
我在编写强数问题的代码,当我运行它的时候,我通过了3个案例,但是当我运行第4个案例的时候,什么也没有发生。
我通过了:1,2,145但是40585。
下面是我的代码:

#include <iostream>

using namespace std;

int Get(int n);
int Factorial(int n, int sum);

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)
{
    static int sum = 0;
    if (n / 10) 
    {
        Get (n / 10);
    }
    return sum += Factorial(n % 10, 1);
}

int Factorial(int n, int sum)
{
    if (n == 1)
    {
        return sum;
    }
    else
    {
        return Factorial(n - 1, sum *= n);
    }
}

我不知道为什么,所以请帮帮我!

hrirmatl

hrirmatl1#

问题是,在这一行:

return sum += Factorial(n % 10, 1);

你用n % 10调用Factorialn % 10可以是0
Factorial不能很好地处理这一点(对于n,它将无限递归)。
您可以通过将Factorial中的递归停止条件更改为以下内容来解决此问题:

if (n <= 1)
{ 
   // ... 
}

旁注:

如果你可以用迭代(即循环)代替递归来实现一个函数--这通常是推荐的。这是因为递归使用的堆栈通常相对较小。
在计算阶乘时,你必须科普int溢出非常快的额外问题- 13!已经太大了,无法存储在32位整数中。你可以通过使用64位整数或一些大数值库来处理它。
然而,在这个特定的例子中,由于Factorial是针对最大值9计算的,所以这两个问题都可以(尽管我仍然更喜欢使用一个简单的阶乘循环)。
正如@lastchance所评论的,您还可以将所有必需的10个值(对于0!.. 9!)保存在预先计算好的数组中。

相关问题