Reversing an Integer's Digits
09-20-2022, 05:18 AM
Post: #1
 Eddie W. Shore Senior Member Posts: 1,581 Joined: Dec 2013
Reversing an Integer's Digits
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.

Code:
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)
09-20-2022, 06:01 AM (This post was last modified: 09-20-2022 06:02 AM by Didier Lachieze.)
Post: #2
 Didier Lachieze Senior Member Posts: 1,630 Joined: Dec 2013
RE: Reversing an Integer's Digits
Thanks for that. The addition to reverse a number is a nice trick if you have an easy way to get access to the individual digits.

Otherwise on the Prime you can also use this one liner that you can define as a user function to reverse the number N:

EXPR(CHAR(REVERSE(ASC(STRING(N)))))

It works with integers and also with positive decimal numbers, for example for 67.28 it returns 82.76

To reverse both positive and negative numbers you need:

SIGN(N)*EXPR(CHAR(REVERSE(ASC(STRING(ABS(N))))))
 « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)