-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 - 因为i / 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 更改为十进制或双精度...

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

于 2010-01-22T16:35:50.870 回答
1

您正在划分整数变量。您将 3 除以 6,它会向下舍入到下一个整数,即零。

使用类型 'double' 而不是 'int' 来获取您可能正在寻找的值。

于 2010-01-22T16:36:00.410 回答