Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей,

 

Тествах с единия граничен случай и веднага изкара грешен резултат:

10 100000000000000000000000000000000000000000000000000

Нещо ти се бъга при големи стойности, но не знам какво.

Бих заложил ма MathPaw, но гадая.

 

Мога и да ти предложа 2 оптимизации на решението, като втората ше разкара MathPaw.

Като за начало, преди да започнеш да умножаваш каквото и да било, може да сложиш един иф веднага след инпута. Ако базата е 10 (което се съмнявам че някой би искал да преобразува от 10 на 10, но все пак го има в условието), да принтираш направо 2рата част от инпута, а не да циклиш и да умножаваш.

2рата оптимизация, която мога да ти предложа, е да държиш в една променлива стойностите, които в твоето решение пресмяташ с MathPaw. С всяка следваща итерация умножаваш това число по съответната база. Так, ако имаш 7*7*7*7*7 например, за да намериш 7 на 6та степен, трябва да умножиш това число по 7 и готово. Като ползваш MathPaw извършваш ненужни умножение (в случая с MathPaw трябва да умножиш 7*7*7*7*7*7, а реално вече имаш отговора на 7*7*7*7*7)

И без тези 2 оптимизации ще получиш 100 точки в Джъджа, но е добре да ги прилагаш ако е възможно :)

 

Поздрави!

0
03/06/2016 18:12:43
denka avatar denka 52 Точки

Здравей,

Някое от изчисленията излиза от int, затова ти се чупи теста. Направи всички операции да са с BigInteger:

BigInteger num = new BigInteger(char.GetNumericValue(number[n]));
BigInteger forSum = BigInteger.Multiply(num, BigInteger.Pow(new BigInteger(baseN), i));
result += forSum;

Поздрави, Дени

1
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей и на теб.

 

Това го опитах и не стана :)

0
denka avatar denka 52 Точки

Здравей пак :)

Ето го цялото, дава си 100 точки:

namespace _05.ConvertFromBase_NtoBase_10
{
    using System;
    using System.Numerics;

    public class FromBase
    {
        public static void Main()
        {
            string[] line = Console.ReadLine().Trim().Split();
            int baseN = int.Parse(line[0]);
            char[] number = line[1].ToCharArray();
            BigInteger result = new BigInteger(0); 

            for (int i = number.Length - 1, n = 0; i >= 0; i--, n++)
            {
                BigInteger num = new BigInteger(char.GetNumericValue(number[n]));
                BigInteger forSum = BigInteger.Multiply(num, BigInteger.Pow(new BigInteger(baseN), i));
                result += forSum;
            }

            Console.WriteLine(result.ToString());
        }
    }
}

Поздрави, Дени

2
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей,

 

Проблемът в нейното решение е MathPaw. Връща double и явно като превърти връща и грешни стойности/гърми. Като се замени с BigInteger.Pow работи.

Да, това е бил проблема, както каза по - рано.

 

Поздрави!

1
TeodorDimitrov89 avatar TeodorDimitrov89 264 Точки

Мога ли да попитам за същата задача ,защото имам същият проблем с разликата че използвам собствен метод MathPow и го правя да приема BigInteger ,защото се бях сетил за вградения че приема double. Това е кода ми дава 80/100.

http://pastebin.com/Paj2JXYS

 

Благодаря предварително.

0
LardaX avatar LardaX 15 Точки

Честно казано нямам идея защо ти се получава така, но пробвай с по-опростен код...изглежда ми излишно сложно, за това, което се иска. Виж моя вариант.
http://pastebin.com/TEVJMpKM

0
LardaX avatar LardaX 15 Точки

Странно, току що пробвах кода ти и ми го прие със 100 точки...метода ти би трябвало да работи. Единствено, не знам до колко е адекватно, но ако искаш добави във for-цикъла на метода, индекса i да не ти е int, а BigInteger...евентуално може в някаква екстремна ситуация да върти цикъла много пъти и затова да не ти е приемало решението, но на сегашния Fundamentals курс го приема и така, и с BigInt във for цикъла.

 static BigInteger MathPow(BigInteger baseN, BigInteger index)
        {
            BigInteger number = 1;

            for (BigInteger i = 0; i < index; i++)
            {
                number = number * baseN;
            }
            return number;
        }

0
athanatos avatar athanatos 4 Точки

здравейте,

едно решение и от мен:

https://pastebin.com/LyLvPYJj

 

надявам се да е полезно.

Поздрави и успех!

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