How to check if a number is pandigital in Pascal

1 Answer

0 votes
// A pandigital number is an integer that contains each digit from 0 to 9 
// at least once, with the condition that the leading digit must be nonzero

// for example, 1023456987 is a pandigital number 

program PandigitalCheck;

uses
  crt;

function IsPandigitalRange(num: longint; startDigit: integer; endDigit: integer): boolean;
var
  s, expected, sorted: string;
  digits: array[1..20] of char;
  i, j, len: integer;
  temp: char;
begin
  str(num, s);

  // Build the expected digit string
  expected := '';
  for i := startDigit to endDigit do
    expected := expected + chr(ord('0') + i);

  // Sort digits of the number
  len := length(s);
  for i := 1 to len do
    digits[i] := s[i];

  // Simple bubble sort (Turbo Pascal friendly)
  for i := 1 to len - 1 do
    for j := i + 1 to len do
      if digits[j] < digits[i] then
      begin
        temp := digits[i];
        digits[i] := digits[j];
        digits[j] := temp;
      end;

  sorted := '';
  for i := 1 to len do
    sorted := sorted + digits[i];

  IsPandigitalRange := (sorted = expected);
end;

begin
  writeln(IsPandigitalRange(123456789, 1, 9));       
  writeln(IsPandigitalRange(1023456789, 0, 9));      
  writeln(IsPandigitalRange(987654321, 1, 9));       
  writeln(IsPandigitalRange(123456780, 1, 9));      
  writeln(IsPandigitalRange(123456780, 1, 9));       
  writeln(IsPandigitalRange(123455789, 1, 9));     
  writeln(IsPandigitalRange(12345, 1, 9));           
end.



(*
run:

TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE

*)

 



answered Feb 25 by avibootz
...