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);
}
}
}
}