Jonathan. Frech’s WebBlog

Palindrome Function (#131)

Jonathan Frech

To get a num­ber’s palindrome in a programming lan­guage like python is easy. There are ways to swap be­tween integer and string and strings can be manipulated.

>>> n = 1234
>>> int(str(n)[::-1])
4321

But I wanted to create a mathematical function 𝑝(𝑛), which returns an integer’s palindrome. Thus 𝑝(1234) = 4321.

Firstly, I needed a way of determining the num­ber’s size. In base 10 the length is calculated using the logarithm to said base.

$$l(n)=\lfloor\log_{10}{n}\rfloor+1$$$$l(n)=\lfloor\log_{10}{n}\rfloor+1$$
$$l(1234)=\lfloor\log_{10}{1234}\rfloor=\lfloor 3.09\rfloor+1=4$$$$l(1234)=\lfloor\log_{10}{1234}\rfloor=\lfloor 3.09\rfloor+1=4$$

Secondly, I need a way to isolate a specific digit. Using the floor function, this function returns the 𝑖-th digit (starting on the right with 𝑖 = 0).

$$d_i(n)=\lfloor\frac{n}{10^i}\rfloor-\lfloor\frac{n}{10^{i+1}}\rfloor\cdot 10$$$$d_i(n)=\lfloor\frac{n}{10^i}\rfloor-\lfloor\frac{n}{10^{i+1}}\rfloor\cdot 10$$
$$d_2(1234)=\lfloor\frac{1234}{10^2}\rfloor-\lfloor\frac{1234}{10^{2+1}}\rfloor\cdot 10=\lfloor 12.34\rfloor-\lfloor 1.23\rfloor\cdot 10=12-1\cdot 10=2$$$$d_2(1234)=\lfloor\frac{1234}{10^2}\rfloor-\lfloor\frac{1234}{10^{2+1}}\rfloor\cdot 10=\lfloor 12.34\rfloor-\lfloor 1.23\rfloor\cdot 10=12-1\cdot 10=2$$

Thirdly, both of these functions can be used to split up the num­ber into a sum.

$$n=\sum\limits_{i=0}^{l(n)-1}\Big[d_i(n)\cdot 10^{i}\Big]=\sum\limits_{i=0}^{\lfloor\log_{10}{n}\rfloor}\Big[\big(\lfloor\frac{n}{10^i}\rfloor-\lfloor\frac{n}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{i}\Big]$$$$n=\sum\limits_{i=0}^{l(n)-1}\Big[d_i(n)\cdot 10^{i}\Big]=\sum\limits_{i=0}^{\lfloor\log_{10}{n}\rfloor}\Big[\big(\lfloor\frac{n}{10^i}\rfloor-\lfloor\frac{n}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{i}\Big]$$

Fourthly, I on­ly need to swap the power of ten at the end to get my palindrome function.

$$p(n)=\sum\limits_{i=0}^{l(n)-1}\Big[d_i(n)\cdot 10^{l(n)-1-i}\Big]=\sum\limits_{i=0}^{\lfloor\log_{10}{n}\rfloor}\Big[\big(\lfloor\frac{n}{10^i}\rfloor-\lfloor\frac{n}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{\lfloor\log_{10}{n}\rfloor-i}\Big]$$$$p(n)=\sum\limits_{i=0}^{l(n)-1}\Big[d_i(n)\cdot 10^{l(n)-1-i}\Big]=\sum\limits_{i=0}^{\lfloor\log_{10}{n}\rfloor}\Big[\big(\lfloor\frac{n}{10^i}\rfloor-\lfloor\frac{n}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{\lfloor\log_{10}{n}\rfloor-i}\Big]$$

Thus the final function 𝑝(𝑛) is defined.

$$p(n)=\sum\limits_{i=0}^{\lfloor\log_{10}{n}\rfloor}\Big[\big(\lfloor\frac{n}{10^i}\rfloor-\lfloor\frac{n}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{\lfloor\log_{10}{n}\rfloor-i}\Big]$$$$p(n)=\sum\limits_{i=0}^{\lfloor\log_{10}{n}\rfloor}\Big[\big(\lfloor\frac{n}{10^i}\rfloor-\lfloor\frac{n}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{\lfloor\log_{10}{n}\rfloor-i}\Big]$$

To check if the formula is correct, I use 1234 (as seen above).

$$p(1234)=\sum\limits_{i=0}^{\lfloor\log_{10}{1234}\rfloor}\Big[\big(\lfloor\frac{1234}{10^i}\rfloor-\lfloor\frac{1234}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{\lfloor\log_{10}{1234}\rfloor-i}\Big]$$$$p(1234)=\sum\limits_{i=0}^{\lfloor\log_{10}{1234}\rfloor}\Big[\big(\lfloor\frac{1234}{10^i}\rfloor-\lfloor\frac{1234}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{\lfloor\log_{10}{1234}\rfloor-i}\Big]$$
$$p(1234)=\sum\limits_{i=0}^{3}\Big[\big(\lfloor\frac{1234}{10^i}\rfloor-\lfloor\frac{1234}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{3-i}\Big]$$$$p(1234)=\sum\limits_{i=0}^{3}\Big[\big(\lfloor\frac{1234}{10^i}\rfloor-\lfloor\frac{1234}{10^{i+1}}\rfloor\cdot 10\big)\cdot 10^{3-i}\Big]$$
$$p(1234)=d_0(1234)\cdot 10^3+d_1(1234)\cdot 10^2+d_2(1234)\cdot 10^1+d_3(1234)\cdot 10^0$$$$p(1234)=d_0(1234)\cdot 10^3+d_1(1234)\cdot 10^2+d_2(1234)\cdot 10^1+d_3(1234)\cdot 10^0$$
$$p(1234)=4000+300+20+1=4321$$$$p(1234)=4000+300+20+1=4321$$