1. Computing & Technology

Discuss in my forum

Challenge: Number of Palindromic Numbers

By , About.com Guide

Question: Challenge: Number of Palindromic Numbers
Challenge: provide the implementation of a custom Delphi function to locate all palindromic numbers from 1 to maxNumber and return the number of found palindromes as a result of the function.

The code is submitted for the Number of Palindromic Numbers Delphi Challenge

Answer: Number of palindromic numbers entry by Philippe Guglielmetti (Switzerland):
 function PhilippeGuglielmetti_NumberOfPalindromes(const maxNumber : int64) : int64;
 const A050250:array[0..18] of integer
         =(0,9, 18, 108, 198, 1098, 1998, 10998, 19998, 109998, 199998, 1099998,
           1999998, 10999998, 19999998, 109999998, 199999998, 1099999998, 1999999998) ;
 const pow10:array[0..9] of integer
         =(1,10,100,1000,10000,100000, 1000000,10000000,10000000,1000000000) ;
 var
   n,m,j,k:Integer;
   d:array[0..18] of Integer;
 begin
   m:=0; n:=maxNumber;
   while n>0 do begin // extract digits
     d[m]:=n mod 10;
     n:=n div 10;
     inc(m) ;
   end;
   n:=m-1; // n=Trunc(log10(maxNumber))
   Result:=A050250[n];
   m:=n; j:=0; k:=n div 2;
   dec(d[n]) ; // because we counted palindromes to 1000..00
   while m-j>=2 do begin // loop from outer digits to inner
     Result:=result+d[m]*(pow10[k]) ;
     dec(m) ; inc(j) ; dec(k) ;
   end;
   inc(Result,d[m]) ; // handle 1 or 2 center digits
   if d[j]>=d[m] then inc(Result) ;
 end;
 

Test data: MAXNUMBER = 10 000 000

Carlos's speed result: 950 nanoseconds.

Explore the list of all accepted entries for the Number of Palindromic Numbers Delphi Challenge.

Readers Respond: Your Delphi Programming Challenges

©2012 About.com. All rights reserved.

A part of The New York Times Company.