Crooked Digits Java

Здавейте ,имам проблем тъй като при подаване на решената задача ми дава 50/100 при положение че ми минава тестовете от самата задача.Ето и кода:https://pastebin.com/yR1442HM
Ако някой помогне ще съм благодарен!

Здравей,
Не знам дали това е проблемът, но този while е почти безкраен: делиш положително число на 10 и след много много много извъртания (пробвай да дебъгнеш, за да видиш), евентуално ще получиш нещо, което явно за java e достатъчно близо до 0, за да излезе от цикъла, но теоретично, винаги резултатът ще е > 0.

 while (input > 0) {
            sum += input % 10;
            input /= 10;
        }

Ако искаш пробвай да го замениш с while(input >= 1) (поне няма да се върти толкова много пъти). Така или иначе след поредното делене на 10, резултатът ще е <= 1. :slight_smile:

В условието се казва, че числото може да е с до 300 цифри преди и след точката. Проблема при теб е, че работиш с double. Първо, това не е целочислен тип и големите числа, дори и цели се представят в експоненциална форма, което представлява отново нецяло число по десет на степен някоя. Второто е че дори да използваш най-големия целочислен тип long, неговите 64 бита побират до 18 цифри, което също няма да ти даде верен резултат.
Решението: Вкарай стринга в цикъл и си извлечи всички цифри, парсвай всяка от тях и я добавай към сумата. Помисли какво да правиш с резултата когато е повече от 9. Например String.valueOf() и повтаряш.

1 Like

Да добавя само, че сумата от цифрите спокойно може да е в int или дори в short, тъй като в най-крайния случай от 300 девятки преди точката и 300 девятки след точката, ще бъде 5400.

1 Like