1

30 分前、ゼロ以外の整数を入力として受け取る単純な階乗計算機を作成しました。いくつかの値についてテストした後、12! までしか正しく機能しないことに気付きました。

私はプログラミングを始めて数か月になりますが、正直なところまだ初心者です。「プログラミングモード」にすばやく戻ることができるように、再帰を使用することにしました(私の好み)。

ほぼ1時間チェックして修正しました。アルゴリズムのどこが悪いのかよくわかりません。

これは私のコードです:

#include <iostream>

using namespace std;

int factorial(int);

int main()
{
    int usrInput = 0;   //initialize input variable
    cout << "Please input the factorial you want to calculate: ";
    cin >> usrInput;
    while(usrInput < 1)
    {
        cout << "Please input a valid number: ";
        cin >> usrInput;
    } //end while
    cout << "\nAnswer: " << factorial(usrInput) << '\n';
    return 0;
}

int factorial(int n)
{
    int product = n;
    if(n < 2)
        product = 1;
    else
    {
        product *= factorial(n-1);
    cout << "\n" << product; //debugging line
    } //end if else
    return product;
}
4

1 に答える 1

1

int の制限を超えています。13!= 6227020800、int は -2147483648 .. 2147483647 のみをカバーします。より大きな型 (例: __int64)、double (ただし精度は失われます) を使用するか、大きな数のライブラリを実装 (または使用) します。

于 2013-01-16T11:06:15.727 に答える