Extended 10. * Data Overflow
Здравейте, искам да попитам относно логиката на закръгляне в задачата DataOverflow? Долу давам двата нулеви теста от задачата.
bigger type: ushort
smaller type: byte
1200 can overflow byte 5 times
bigger type: uint
smaller type: byte
100000 can overflow byte 392 times
Ако прием, че стойността на 1 byte=255
1200/255=4.70588235294
1000000/255=392.156862745
Ако приемем, че в задачата броим само пълните overflow-ли, т.е.закръгляме надолу, отговорите биха били => 4 и 392 (с това решение резултата е 30/100), недоволен от резултата, реших да си поиграя със закръглянията, в следствие на което открих, че с Math.Ceil резултата ми достига 70/100, а с Math.Round 90/100. Това е кода ми, ще съм благодарен, ако някой ми обясни правилната логика за решаване на тази задача, а не само да ми даде вярно решение :).
Благодаря предварително.
using System;
namespace extended3._10._1
{
class Program
{
static void Main()
{
var first = decimal.Parse(Console.ReadLine());
var second = decimal.Parse(Console.ReadLine());
var smaller = Math.Min(first, second);
var bigger = Math.Max(first, second);
Console.WriteLine("bigger type: " + numType(bigger));
Console.WriteLine("smaller type: " + numType(smaller));
var smallerType = numType(smaller);
decimal overflowCount = 0;
switch (smallerType)
{
case "byte":
overflowCount = bigger / byte.MaxValue;
break;
case "ushort":
overflowCount = bigger / ushort.MaxValue;
break;
case "uint":
overflowCount = bigger / uint.MaxValue;
break;
default:
overflowCount = 0;
break;
}
Console.WriteLine($"{bigger} can overflow {numType(smaller)} {Math.Round(overflowCount,MidpointRounding.ToEven)} times");
}
private static string numType(decimal v)
{
return byte.MaxValue>=v?"byte":ushort.MaxValue>=v?"ushort":uint.MaxValue>=v?"uint":"ulong";
}
}
}