因子任务输出错误

时间:2010-01-22 16:31:15

标签: 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)
        {
            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)));
            }
        }
    }
}

3 个答案:

答案 0 :(得分:8)

这是因为你正在进行整数除法 - 将一个int除以另一个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。

答案 1 :(得分:2)

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

int c = i / fact(i);

改变c&我是小数或双...

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

答案 2 :(得分:1)

你要划分整数变量。你将3除以6,它将向下舍入到下一个整数,即零。

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