-
Notifications
You must be signed in to change notification settings - Fork 365
/
reverse_integer.py
74 lines (57 loc) · 2.1 KB
/
reverse_integer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env python
"""Reverse Integer
This script reverses an integer entered by the user. Input is validated
and reversal is done only for integer values. Negative integers are reversed
just like positive integers, but with the '-' sign maintained. Leading zeros
are dropped in the reversed number.
Input -> output samples:
123 -> 321
-123 -> -321
3210 -> 123
123.4 -> 'Only integer values can be reversed.'
22a -> 'Only integer values can be reversed.'
<blank> -> 'Argument missing. Enter an integer for reversal.'
Python: 3.10.8
External packages: None
Author: Siddhant Tiwari (github.com/stiwari-ds)
"""
import sys
def reverse_digits(num: str) -> int:
"""Reverses the input if it is an integer.
1. Converts string input to integer if valid.
2. Removes '-' sign for negative integers and stores it for later.
3. Extracts one digit at a time from the units position of original number
using modulo division.
4. Push in the extracted digit into units position of reverse number.
5. Repeat steps 3 and 4 until all digits are extracted.
6. Multiply by -1 if the number was originally negative.
Args:
num (str): The integer to be reversed, as a string.
Validated before reversal.
Returns:
int: Reversed integer
"""
reverse = 0
negative_flag = False
try:
original = int(num)
except ValueError:
sys.exit("Only integer values can be reversed.")
# negative integer handled as positive and converted later
if original < 0:
negative_flag = True
original *= -1
while original > 0:
digit = original % 10 # extract last digit
# push in the extracted digit at units position of reverse number
reverse = reverse * 10 + digit
original //= 10 # remove last digit from original number
if negative_flag:
reverse *= -1
return reverse
if __name__ == "__main__":
try:
num = sys.argv[1]
except IndexError:
sys.exit("Argument missing. Enter an integer for reversal.")
print(f"Reversed integer: {reverse_digits(num)}")