C# 阶乘任务错误地输出零

C# 阶乘任务错误地输出零,c#,factorial,C#,Factorial,我在程序的试运行中遇到了问题。我不明白为什么我的程序在输出中给出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)

我在程序的试运行中遇到了问题。我不明白为什么我的程序在输出中给出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)));
            }
        }
    }
}

这是因为你在做整数除法——一个整数除以另一个整数的结果就是一个整数——因为
i/Factorial(i)
小于1(对于i>2),结果被截断为0。可以通过将分子和除数转换为双精度来解决此问题:

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

编辑:对于i=1,整数除法有1/1,并且不会发生截断。对于i=2:(2/Fact(2))2/2=1也会发生同样的情况。

正如Lee所说,你在直线上进行整数除法

int c=i/fact(i)

将c&i更改为十进制或双精度


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

您正在除以整数变量。你将3除以6,然后四舍五入到下一个整数,即0


使用类型“double”而不是“int”来获取您可能要查找的值。

但是当我初始化i=1时;它给出了1。。为什么会这样?@Abid:因为1/事实(1)是1/1是1。@Abid:看看Danthan对你的问题的评论。1阶乘是1,但3阶乘是6。因为你把原始数除以它的阶乘,你得到3/6。虽然算术上是.5,但分数部分在整数除法中被截断,留下0。代码是错误的:阶乘是事实(i),而不是i/fact(i)。@Dathan:代码可能没有错误,只是它的标签可能不正确。这个赋值很好地指导用户将数字除以它的阶乘。请不要忘记0!(即事实(0))根据定义等于零。现在,如果以0作为参数运行,则您的fact()方法将抛出OverflowException。@Yuiry:为什么在社区wiki中提出这个问题?这是一个标准的封闭式问题。@Igor:0!是一,不是零!为什么在三分钟前给出了更完整(投票率更高)的答案时,这是公认的答案?