我在程序的干运行中遇到了问题。我不明白为什么我的程序在输出中给出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)));
}
}
}
}
答案 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'来获取您可能正在寻找的值。