Определить количество разрядов числа и вывести на экран в определенном формате

Задача: 

Ввести число. Если количество его разрядов меньше пяти, то вывести его на экран, дописав нули перед числом так, чтобы в итоге получилось пять знаков. Если количество разрядов больше пяти, то вывести только первые пять разрядов. Если число пятизначное, то вывести его как есть.

Описание переменных: 

a - введенное число;
b - хранение результата выполнения операций над числом a;
n - количество разрядов числа;
diff - разница между числом 5 и n.

Алгоритм решения задачи: 
  1. Определить количество разрядов числа.
  2. Найти разность между необходимым числом разрядов (уменьшаемое) (в данном случае 5) и полученным значением (вычитаемое).
  3. Если разность положительна, значит в введенном числе меньше пяти разрядов. В этом случае в цикле дописываем нули перед числом.
  4. Если разность отрицательна, то введенное число имеет больше пяти разрядов. В этом случае в цикле делим его нацело на 10.
  5. Во всех остальных случаях выводим число как есть.
Программа на языке Паскаль: 

const
    D = 5;
var
    a,b: longint;
    n,diff: integer;
begin
    write('a = '); readln(a);
    b := a;
    n := 0;
    if b = 0 then n := 1;
    while b > 0 do begin
        b := b div 10;
        n := n + 1;
    end;
 
    diff := D-n;
    if diff > 0 then begin
        while diff > 0 do begin
            write('0');
            diff := diff - 1;
        end;
        writeln(a);
    end
    else begin
        if diff < 0 then begin
            b := a;
            while diff < 0 do begin
                b := b div 10;
                diff := diff + 1;
            end;
            writeln(b);
        end
        else
            writeln(a);
    end;
 
readln;
end.

Комментарии

Или я чего-то не понимаю, но

Или я чего-то не понимаю, но по моему вот в этом месте
if b = 0 then n := 1;
while b > 0 do begin
b := b div 10;
n := n + 1;
надо проверять не b=0 а b=1, b никогда не станет меньше или равным 0 если оно положительное изначально, оно только будет стремиться.

Если пользователь введет

Если пользователь введет число 0, то далее оно будет присвоено переменной b. Цикл while при этом выполняться не будет и значение переменной n (которое обозначает кол-во разрядов числа) так и останется равным нулю. Но число 0 вроде как имеет один разряд. Поэтому до цикла while проверяется не ноль ли ввел пользователь.