Igor Krovokon already said it, but I wanted to elaborate a bit.
Why do you think the contents of a hotel number is a number? "12" is not a number. It is a string containing a couple of digits. You can't take the square root of room #153, but you can do it with the number 153.
A hotel room number does not behave as a number. A number is a mathematical concept, and can be represented textually in a lot of different ways. 14 could be written as XIV in roman numerals, "fourteen", or 0xfe in hex, or 11111110 in binary. But the hotel staff is likely to give you a very odd look if you ask for "room one-one-one-one-one-one-one-zero."
Hotel room numbers are not mathematical numbers, so they should not be represented as integers.
Are they string then? Yes, more or less, but they do have a few additional constraints, as you noticed.
Not every string is a valid hotel number. "14" is good, but "Watermelon" is not.
So ideally, it should be represented as an abstract data type which wraps a string, and ensures that no non-digits exist in the string.
In practice, of course, you're unlikely to run into many problems if you take the simple way out though, and represent room numbers as either ints or strings. But the best design would be one that ensured that room numbers behave as room numbers. Neither strings or ints do that.