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 581 Точки
Best Answer

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

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

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.