Помощ за Telerik Academy Exam 1 @ 2 February 2015 Evening - 3. Maslan


0

Здравейте колеги !

Днеска реших да порешавам малко задачи от изпитите от миналите години и сега се затрудних на този: http://bgcoder.com/Contests/Practice/Index/203#2

И ето ми го кода и ми дава всеки път 50 точки и проверих тези 50 точки винаги броят на трансформациите tr е по-малък от 10 и винаги като е равно на 10 е грешен отговора.

Със примерните входове си работи и може ли да ми кажете къде ми е грешката ?

Благодаря ;)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exam
{
    class Program
    {
        static void Main(string[] args)
        {
            ulong num = ulong.Parse(Console.ReadLine());
            ulong tr = 0;
            while (true)
            {
                if(tr >= 10)
                {
                    Console.WriteLine(num);
                    break;
                }
                else if (num < 10)
                {
                    Console.WriteLine(tr);
                    Console.WriteLine(num);
                    break;
                }
                else
                {
                    num = GetTheResult(num);
                    tr++;
                }
            }

        }

        static ulong GetTheResult(ulong num)
        {
            List<ulong> nums = new List<ulong>();
            string numAsString = num.ToString();
            while (numAsString.Length > 1)
            {
                num /= 10;
                numAsString = num.ToString();
                ulong numNow = 0;
                for (int i = 0; i < numAsString.Length; i++)
                {
                    if (i % 2 != 0) 
                    {
                        numNow += (ulong)(numAsString[i] - '0');
                    }
                }
                if (numNow != 0)
                {
                    nums.Add(numNow);
                }

            }
            ulong result = 1;
            for (ulong i = 0; i < (ulong)nums.Count; i++)
            {
                result *= nums[(int)i];
            }
            return result;
        }
    }
}

              



Отговори



2

Здравей,

решението ти е абсолютно правилно и дава 100 точки, но не си преценил добре с какви обемни данни ще работиш. Ако използваш BigInteger, ще получиш 100/100. Ако не знаеш как да реферираш System.Numerics: десен бутон в/у References -> 'Add Reference...' -> от менюто вдясно избираш да търсиш в асемблито и от списъка чекваш System.Numerics. След това си пишеш using-а и заменяш ulong с BigInteger. :)


от krasi.totev (128 точки)


2
Мерси  за отговора сега работи :)

от Merhatt (1406 точки)