Факториальная задача неправильно выводит ноль - PullRequest
0 голосов
/ 22 января 2010

У меня проблема с пробным прогоном программы. Я не понимаю, почему моя программа дает 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 ]

8 голосов
/ 22 января 2010

Это потому, что вы делаете целочисленное деление - результатом деления одного целого на другое является целое число - поскольку 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.

2 голосов
/ 22 января 2010

Как сказал Ли, вы делаете целочисленное деление в строке

int c = i / fact(i);

Измените c & i на десятичное или двойное ...

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

1 голос
/ 22 января 2010

Вы делите целочисленные переменные. Вы делите 3 на 6, что округляется до следующего целого числа, равного нулю.

Используйте тип 'double' вместо 'int', чтобы получить значение, которое вы, вероятно, ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...