Хорошо, поскольку то, что вы просите, должно быть четко объяснено, я пишу это здесь ... так что я не путаю все это в комментариях ...
Функция: (Отредактированонемного, чтобы он выглядел более C ++ - стандарт )
void fast_scanf(int &number)
{
auto ch = getchar_unlocked();
number= 0;
while (ch >= '0' && ch <= '9')
{
number = number * 10 + ch - '0';
ch = getchar_unlocked();
}
}
Здесь рассмотрим сначала таблицу ASCII , так как вы выигралине понимаю, как получаются результаты, если вы не ...
1) Здесь у вас есть символ ch
принимает входной символ от пользователя с помощью getchar_unlocked()
(ключевое слово auto делает это автоматически для вас и может использоваться только в C ++, но не в C) ...
2) Вы присваиваете переменную число до нуля, чтобы можно было повторно использовать переменную, обратите внимание, что переменная является ссылкой, поэтому она также изменяется внутри вашей программы ...
3) while (ch >= '0' && ch <= '9')
... Как уже указывалось, проверяется, находятся ли символы в пределах числового предела ASCII, аналогично тому, что символ должен быть большеn или равно 48, но меньше или равно 57 ...
4) Здесь все немного сложнее, переменная число умножается напроизведение самого себя и 10 и действительное целое значение сохраненного вами символа) ...
5) В следующей строке ch переназначается так, чтобы выне нужно оставаться в цикле вечно, так как ch останется этим числом навсегда, если пользователь ничего не печатает ... помните, что цикл возвращается туда, где он был объявлен после достижения конца, проверяет, выполняется ли условие, продолжается, если это правда, иначе ломается) ...
Например: 456764 Здесь ch сначала будет брать 4, а затем остальные, так что мы идем с 4первый ...
1) Число будет присвоено нулю.В то время как цикл проверяет, является ли данный символ числом или нет, если он продолжается, цикл прерывает его ...
2 ) Умножение 0 на 10будет равен нулю ... , и сложение с разницей 52 (то есть '4'
) с 48 (то есть '0'
) даст вам 4 ( действительное числовое значение, а несимвол '4'
) ... Таким образом, номер переменной теперь равен 4 ...
И то же самое продолжается и с другими ... См....
number = number * 10 + '5' - '0'
number = 4 * 10 + 53 - 48
number = 40 + 5
number = 45... etc, etc. for other numbers...