Ввести число. Если количество его разрядов меньше пяти, то вывести его на экран, дописав нули перед числом так, чтобы в итоге получилось пять знаков. Если количество разрядов больше пяти, то вывести только первые пять разрядов. Если число пятизначное, то вывести его как есть.
a - введенное число;
b - хранение результата выполнения операций над числом a;
n - количество разрядов числа;
diff - разница между числом 5 и n.
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 then begin b := a; while diff 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 проверяется не ноль ли ввел пользователь.