Игорь Кровоконь уже сказал это, но я хотел бы уточнить.
Почему вы думаете, что номер отеля - это номер? «12» - это не число. Это строка, содержащая пару цифр. Вы не можете взять квадратный корень из комнаты # 153, но вы можете сделать это с номером 153.
Номер в гостиничном номере не ведет себя как номер. Число является математическим понятием и может быть представлено в тексте множеством разных способов. 14 можно записать как XIV римскими цифрами, «четырнадцать», или 0xfe в шестнадцатеричном формате, или 11111110 в двоичном. Но персонал отеля, скорее всего, будет выглядеть очень странно, если вы попросите "номер один-один-один-один-один-один-один-ноль".
Номера гостиничных номеров не являются математическими числами, поэтому их не следует представлять в виде целых чисел.
Они струны тогда? Да, более или менее, но у них есть несколько дополнительных ограничений, как вы заметили.
Не каждая строка является действительным номером отеля. «14» - это хорошо, а «Арбуз» - нет.
Так что в идеале он должен быть представлен в виде абстрактного типа данных, который переносит строку и гарантирует, что в строке не существует никаких цифр.
На практике, конечно, вы вряд ли столкнетесь с множеством проблем, если примете простой выход и представите номера комнат как целые или строковые значения. Но лучшим дизайном будет тот, который гарантирует, что номера комнат ведут себя как номера комнат. Ни строки, ни целые числа не делают этого.