-2

プログラムの予行演習で問題が発生しています。私のプログラムが出力に 0 を与える理由がわかりません。これが私のコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Task_8_Set_III
{
    class Program                      
    {
        static void Main(string[] args)
        {
            int i = 3;
            int c = i / fact(i);
            Console.WriteLine("Factorial is : " + c);
            Console.ReadLine();
        }
        static int fact(int value)
        {
            if (value ==1)
            {
                return 1;
            }
            else
            {
                return (value * (fact(value - 1)));
            }
        }
    }
}
4

3 に答える 3

8

これは、整数除算を行っているためです。ある int を別の int で除算した結果は inti / Factorial(i)です。1 未満であるため (i > 2 の場合)、結果は 0 に切り捨てられます。これは、分子と除数を変換することで修正できます。ダブルスへ:

double c = (double)i / (double)fact(i);

編集: i = 1 の場合、整数除算の 1 である 1/1 があり、切り捨ては発生しません。i = 2 でも同じことが起こります: (2/Fact(2)) 2/2 = 1.

于 2010-01-22T16:32:58.733 に答える
2

リーが言ったように、整数除算を行で行っています

int c = i / fact(i);

c & i を 10 進数または倍精度に変更...

double c = (double)i / fact(i);

于 2010-01-22T16:35:50.870 に答える
1

整数変数を除算しています。3 を 6 で割り、次の整数 (ゼロ) に切り捨てます。

おそらく探している値を取得するには、「int」の代わりに「double」型を使用してください。

于 2010-01-22T16:36:00.410 に答える