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 Carlos Trevino (México):
 function CarlosTrevino_NumberOfPalindromes(const maxNumber : int64) : int64;
 var
   N,j, Mult: Int64;
   k: Integer;
   Even: Boolean;
   Digits: Array[1..20] of Integer;
   NDigits: Integer;
   Mid,Top: Integer;
   TopPal: Integer;
   MultI, LowNum, HighNum,HighNumPal: Integer;
 begin
   if MaxNumber<1 then
   begin
     result:=0;
     exit;
   end;
   N:=MaxNumber div 10;
   result:=0;
   j:=9;
   Even:=False;
   Ndigits:=1;
   Digits[NDigits]:=MaxNumber mod 10;
   while N>0 do
   begin
     result:=result+j;
     if Even then j:=j*10;
     Even:=Not Even;
     Inc(Ndigits) ;
     Digits[Ndigits]:=N mod 10;
     N:=N div 10;
   end;
   if NDigits=1 then
     result:=MaxNumber
   else
   begin
     Mid:=Ndigits div 2;
     Top:=NDigits;
     LowNum:=0;
     HighNum:=0;
     HighNumPal:=0;
     Top:=Mid +(NDigits mod 2) ;
     TopPal:=NDigits;
     MultI:=1;
     for k := 1 to Mid do
     begin
       Inc(Top) ;
       LowNum:=LowNum+Digits[k]*MultI;
       HighNum:=HighNum+Digits[Top]*MultI;
       HighNumPal:=HighNumPal+Digits[TopPal]*MultI;
       Dec(TopPal) ;
       MultI:=MultI * 10;
     end;
     J:=(HighNum-(MultI div 10)) ;
     if (NDigits mod 2)=1 then
        J:=j*10+Digits[Mid+1];
     if HighNumPal<=LowNum then
        J:=j+1;
     result:=result+j;
   end;
 end;
 

Test data: MAXNUMBER = 10 000 000

Carlos's speed result: 1550 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.