Професионална програма
Loading...
+ Нов въпрос
Xapuu avatar Xapuu 25 Точки

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


 

Тагове:
0
Fundamentals Module
spzvtbg avatar spzvtbg 582 Точки
Best Answer

https://pastebin.com/2GJxGrS3 - 100/100 - логиката ти е вярна  липсва ти само случай че минималния тип може да е и улонг

и от там нататък ти трябва  само мат.раунд за резултата

0