C# десятичное, ulong, расчетные величины

У меня есть этот код для моей проблемы. Я почти там для некоторых тестов, я получаю немного разные результаты. Как вы увидите, переменная c должна быть "десятичной". Однако при умножении его на переменную "n". Это проблема:

Ваша задача - написать программу для расчета количества тортов, которые Иванчо может сделать в этот день, и цены за один торт. Вам дадут несколько цифр. Количество тортов, которые Иванчо хочет в этот день, килограммы муки, необходимые для приготовления одного торта, килограммы муки, которые поставщик может вам дать, количество трюфелей, которые вы можете купить, и цена каждого трюфеля. Если у Иванчо будет достаточно муки, чтобы получить желаемое количество тортов, он сделает именно это количество, оставшаяся мука будет отброшена, и вы должны напечатать на консоли "Все доступные продукты, цена торта: {цена одного торта} ". В качестве альтернативы, если не хватает муки, вы должны округлить количество выпекаемых тортов до целого числа и распечатать их на консоли в формате "Можно сделать только {количество выпеченных тортов}, торты, нужно {килограмм". необходимой муки} кг больше муки ”, где килограммы необходимой муки - это разница между килограммами муки, необходимыми для приготовления требуемого количества выпечки Иванчо, и доступными килограммами муки. Входные данные должны быть прочитаны с консоли. Он состоит из пяти входных значений, каждое в отдельной строке: • Число n - количество тортов, которое хочет Иванчо. • Количество с - килограммы муки, необходимые для приготовления одного кекса. • Количество f - килограмм доступной муки. • Число t - количество доступных трюфелей. • Число р - цена одного трюфеля.

 Если не хватает муки для того, чтобы количество выпечек, которые Иванчо хочет напечатать на консоли: o "Можно сделать только {количество выпечек, которые могут быть изготовлены}, выпекать, нужно {килограмм муки необходимо} кг муки больше"  Если муки достаточно:  количество выпечек должно быть целым; цена на торт и килограммы необходимой муки должны быть округлены до двух цифр после десятичной точки. Ограничения  Число n будет действительным целым числом в диапазоне [1 … 18 446 744 073 709 551 615]  Число c будет числом с плавающей запятой в диапазоне [0 … 7,9 x 1028].  Числа f, t и p будут действительными целыми числами в диапазоне [0 ... 4 294 967 295].  используя Систему; using System.Collections.Generic; использование System.Linq; использование System.Text; использование System.Threading.Tasks;

namespace CakeTycoon
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = ulong.Parse(Console.ReadLine()); // amount of cakes George wants
            var c = decimal.Parse(Console.ReadLine()); // kg of fllour needed to make 1 cake

            var f = uint.Parse(Console.ReadLine()); // kg of flour available
            var t = uint.Parse(Console.ReadLine()); // amount of truffles available
            var p = uint.Parse(Console.ReadLine()); // price of one truffle


            var truffelCost = t * p; // total price of truffles

            var cakesCanBeMade = Math.Floor(f / c );

            var cakePrice = (truffelCost / n) * 1.25;
            var flourNeeded = 0.00;
            var totalFlour = n * c;

            if (cakesCanBeMade >= n)
            {
                Console.WriteLine("All products available, price of a cake: {0}", cakePrice); 

            }
            else if (cakesCanBeMade < n)
            {
                flourNeeded = totalFlour - f ;
                Console.WriteLine("Can make only {0} cakes, need {1}kg more flour", cakesCanBeMade,flourNeeded);
            }

        }
    }
}

1 ответ

Решение
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CakeTycoon
{
    class Program
    {
        static void Main(string[] args)
        {
            ulong cakesWanted = ulong.Parse(Console.ReadLine());
            double kilosPerCake = double.Parse(Console.ReadLine());
            uint flourKilos = uint.Parse(Console.ReadLine());
            uint truffles = uint.Parse(Console.ReadLine());
            uint trufflePrice = uint.Parse(Console.ReadLine());

            ulong truffleCost = (ulong)truffles * trufflePrice;
            double cakesProduced = Math.Floor(flourKilos / kilosPerCake);

            if (cakesProduced < cakesWanted)
            {
                double kilogramsNeeded = (kilosPerCake * cakesWanted) - flourKilos;
                Console.WriteLine("Can make only {0} cakes, need {1:F2} kg more flour", cakesProduced, kilogramsNeeded);

            }
            else
            {
                double cakeCost = ((double)truffleCost / cakesWanted) * 1.25d;
                Console.WriteLine("All products available, price of a cake: {0:F2}", cakeCost);
            }
        }
    }
}
Другие вопросы по тегам