Здравейте,
имам нужда от малко помощ с довършването на задачата https://judge.telerikacademy.com/problem/01mathexp.
С този код https://pastebin.com/7zrVLYGv, case 10 и 11 са ми грешни отговори.
Някакви идеи?
Здравейте,
имам нужда от малко помощ с довършването на задачата https://judge.telerikacademy.com/problem/01mathexp.
С този код https://pastebin.com/7zrVLYGv, case 10 и 11 са ми грешни отговори.
Някакви идеи?
Нещо от закръглянето е проблема.
Когато сменя Math.floor(m % 180) на Math.round(m % 180) 10 и 11 минават
Но 8 и 9 гърмят
Към обяд ще го погледна и ще ти кажа ако още не си го оправил.
Math.sin(Number(((BigInt(m*1000000)/BigInt(1000000)) % BigInt(180))));
така мина, благодаря за насоката
Друг начин е да се използва функцията Math.trunc()
Math.sin(Math.trunc(m % 180))
В условието на задачата не е даден пример как трябва да се пресмята функцията M mod 180 при отрицателни стойности на M, откъдето условието може да се интерпретира по различни начини.
Разликата между Math.floor()
и Math.trunc()
се състои в това, че Math.floor(x)
винаги е най-голямото цяло число, което не надвишава x
, докато Math.trunc(x)
е x
с “отрязана” дробна част, т.е. Math.floor(x)
, ако x >= 0
, и Math.ceil(x)
, ако x < 0
. Например:
Math.floor(-3.2) == -4
Math.trunc(-3.2) == -3
Същият ефект има умножението на x
с подходящо цяло число q
, такова че q * x
да бъде също цяло число, последвано от целочислено деление на q
, както в решението на Петър.
Number(BigInt(-3.2 * 10) / BigInt(10)) == -3
Насочи ме израза че подадените числа няма да са с повече от 6 знака след десетичната запетая, а това означaваше за мен че BigInt (евентуално?) ще се погрижи за закръглянето.
Чесно казано Math.trunc() ми бе попаднал на скоро в полезрението, но така и не вникнах в дълбочина в смисалът му, за което съм ти мн благодарен за разяснението