Конвертируем строку в число - C#, Python, JS
Added 2025-01-11 15:45:23 +0000 UTCВ этом видео конвертирую строку в число. Не готовился, поэтому в конце немного получилось не очень хорошо, я написал пример, который работает не понятным для меня образом и локально я эту проблему воспроизвести не смог. Прикрепляю тот же пример и если я выполняю его локально, то sign остаётся положительным.
Конвертируем строку в число - C#, Python, JS
Comments
<div ><div><span class="text">Матвей Пеньков, Мой код сработал:<br>result - c[i] - '0')) / 10 != r<br>Потом идёт проверка, если sign положительный, то вернуть положительное число, но возвращается отрицательное, значит sign поменялся. Почему? Локально не меняется. А у leetcode меняется.</span></div><div></div></div>
Програмысли
2025-02-27 19:16:02 +0000 UTC<div ><div><span class="text">Матвей Пеньков, Это да. На сколько помню в VS есть настройка</span></div><div></div></div>
Програмысли
2025-02-27 17:53:16 +0000 UTC<div ><div><span class="text">По умолчанию арифметические операции в C# выполняются в unchecked-контексте, где переполнение не проверяется. Если необходимо получать исключение при переполнении, то стоит производить вычисления в checked блоке кода: checked { ... }</span></div><div></div></div>
Матвей Пеньков
2025-02-27 17:18:51 +0000 UTC<div ><div><span class="text">Я объясню в чем заключалась проблема из конца видео.</span></div><div></div><div><span class="text">Дело в том, что, при выходе за диапазон значений int32, происходит переполнение int.MaxValue. В двоичном коде int.MaxValue выглядит так:<br>0111 1111 ... 1111<br>Число 0 здесь означает знак числа. Тогда, при добавлении единицы, получим:<br>1000 0000 ... 0000<br>Что соответствует int.MinValue.<br>То есть int.MaxValue+1 становится равным int.MinValue. Это значит, что в данном условии: if ( ( result - c[i] - '0')) / 10 != r) {...}<br>- будет выходить false и содержимое блока if не выполнится. А в таком случае, в result останется значение int.MinValue, что мы и наблюдаем в данном случае.<br>Чтобы решить эту проблему, можно добавить проверку: result<temp. Тогда, если вдруг result станет меньше temp, что математически невозможно, значит мы вышли за диапазон значений. Иными словами, полное if условие будет таким:<br>if ( ( result - c[i] - '0')) / 10 != r || result<r) {...} </span></div><div></div></div>
Матвей Пеньков
2025-02-27 17:18:41 +0000 UTC