Задача по C#.... Малко помощ пак


0
Направих всичко което се изискваше за Problem 2 – Text to Number от Telerik Exam 2015, но нещо това не се получава: "create module of the RESULT by the provided number (M)". Какво точно трябва да се направи в случая? Благодаря предварително.



Отговори



2
Най-вероятно Result % M

от topalkata (6442 точки)


0

Пробвала съм го, но не става. В примера към задачата е дадено:

......

RESULT = 9359400960 * 9(9) = 84234608640

RESULT = 84234608640 % 9999( ) = 2943

RESULT = 2943 % 9999(;) = 2943

.....

Как се получава това 2943 във втория ред?


от diana_monday (50 точки)


0
2943 е остатъка при делението на 84234608640 и 9999.

от milislavski (886 точки)

0

Модулът е остатъкът при целочислено деление на дадено число. В случая

 84234608640/9999= 8424303(цяла част) и 2943 (остатък)

Същото е като това:

RESULT = 2236 % 2222( ) = 14 - само, че тук примерът е по-прост, защото числата са по-малки.

П.С. Точно RESULT % M се смята. Но тъй като RESULT е доста голямо число, ако си го дефинирала като int ще прелее. Ползвай long




0
Привет, за да получиш по конретен отговор е хубаво да покажеш и кода върху който се тормозиш. Ето ти едно решение за сто точки, дано съм бил полезен. Решението.

от milislavski (886 точки)


0

Моят код е:  Моето Решение

Сега тестовете от задачата минават, но в bgcoder - минават само първите 2 :) 

Съжалявам, че съм много досадна, но бих искала да разбера защо не минават тестовете при изпълнението на моя код.


от diana_monday (50 точки)


0

Вероятно заради това:

int result = 0;

Трябва да е long result =0;

Много от тестовете са с големи числа и int прелива .




0
Това действие се извършва, ако моментният резултат (RESULT) е по-голям от числото (M), ако M е по-голямо от резултата, действието не се извършва, последният резултат се запазва и се преминава към следващият символ от текста :)

от shopov91 (142 точки)


0

Можеш да добавиш един if

else { if (result>M) { result = result % M; } }

  и ще се оправи, също така типа данни на result трябва да промениш от int на long, за да не гърми при големи резултати . 


от shopov91 (142 точки)

1

Това къде точно в условието го прочете?

А и това сравнение е излишно - ако  M > result, то result % M винаги ще е result. T,e, тези редове не са грешни, но на практика не правят нищо.


от JulianG (5316 точки)



0

Пробвах така както казвате -замених int на long, добавих if result>M, но пак не става: само два верни -  10/100....

Нов вариант


от diana_monday (50 точки)


2

if (M >= 2000 & M <= 10000) и if (str.Length > 0 & str.Length <= 10000)

трябва да е &&(логическо "и") вместо &(побитово "и")

А всъщност са и изобщо излишни тези проверки, защото по условие М винаги в посочения интервал,

както и дължината на стринга е под 100000 символа.

Последният ред (else result = result + 0;) също е излишен.

И един съвет за форматирането на кода - добре е кодът на всички блокове (if, else if итн) да е обграден с {},

както и да се слагат нови редове, където е необходимо, така се повишава четимостта и се намалява рискът

от грешки, например:

if (...)

{

...

}

else if()

{

...

}

else

{

...

}


от topalkata (6442 точки)

1

И още: "The length of the text will always be less than 100 000" , а при теб е "str.Length <= 10000"

Малките камъчета обръщат колата... :)

P.S. Имам един смътен спомен, че всичко ще работи и без тия парсвания на char към int... ма го провери де.


от JulianG (5316 точки)