**HP Prime: Reversing an Integer's Digits**

*(Inspired by the HHC 2022 programming contest)*

**What Should I Add To Reverse the Digits?**

Let A, B, C, D, and E be individual digits (0-9) of an integer. AB would represent a two digit integer with the value of 10 * A + B. ABC would represent a three digit integer with the value of 100 * A + 10 * B + C.

Reversing a Two Digit Integer

AB + # = BA

10 * A + B + # = 10 * B + A

# = 9 * (B - A)

Example: Let AB = 76.

A = 7, B = 6

# = 9 * (6 - 7) = -9

76 - 9 = 67

Reversing a Three Digit Integer

ABC + # = CBA

100 * A + 10* B + C + # = 100 * C + 10 * B + A

# = 99 * (C - A)

Example: ABC = 469

# = 99 * (9 - 4) = 495

469 + 495 = 964

Reversing a Four Digit Integer

ABCD + # = DCBA

1000 * A + 100 * B + 10 * C + D + # = 1000 * D + 100 * C + 10 * B + A

# = 999 * (D - A) + 90 * (C - B)

Example: ABCD = 7219

# = 999 * (9 - 7) + 90 * (1 - 2) = 1908

7219 + 1908 = 9127

Reversing a Five Digit Integer

ABCDE + # = EDBCA

10000 * A + 1000 * B + 100 * C + 10 * D + E + # =

10000 * E + 1000 * D + 100 * C + 10 * B + A

# = 9999 * (E - A) + 990 * (D - B)

Example: ABCDE = 52693

# = 9999 * (3 - 5) + 990 * (9 - 2) = -13068

52693 - 13068 = 39625

**Having the Calculator Do It**

The program REVINT reverses the digits of an integer, up to 11 digits. The program does not allow numbers that have non-zero fractional parts or integers more than 11 digits. Instead of solving for # (see above), the program splits the integers into a list in reverse order, and uses list processing to get the final answer.

**HP Prime Program: REVINT**

Caution: Integers that end or begin with zero may not return accurate results. My suggestion is not use 0s with this program. See examples below for more details.

**EXPORT REVINT(N)**

**BEGIN**

**// 2022-09-18 EWS**

**// reverse the integer N**

**// up to 12 digits**

**LOCAL D,P,A,I,M,L;**

**L:={};**

**P:=XPON(N);**

**// check size **

** IF P>11 THEN**

** RETURN "TOO BIG";**

** KILL;**

** END;**

** **

**// check type**

** IF FP(N) THEN**

** RETURN "NOT AN INTEGER";**

** KILL;**

** END;**

** **

**D:=N;**

**// loop**

** FOR I FROM P DOWNTO 0 DO**

** A:=D/ALOG(I);**

** L:=CONCAT({IP(A)},L);**

** D:=D-IP(A)*ALOG(I); **

** END;**

** **

**// rebuild **

**M:=ΣLIST(MAKELIST(ALOG(X),X,P,0,−1)*L);**

**RETURN M; **

**END;**

Examples:

REVINT(4321) returns 1234

REVINT(56765) returns 56765 (56765 is a palindrome, reversing the digits results in the same number)

REVINT(42910) returns 1924 (01924 - be aware about integers ending or beginning with 0)

REVINT(67.28) returns "NOT AN INTEGER" (error)

Eddie

All original content copyright, © 2011-2022. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.