Удалить из числа цифру с заданным номером - PascalABC.NET
Формулировка задачи:
Задание такое. Убрать из интегер цифру под каким то номером. Без перевода в стринг, чар и др. Исключительно числовыми данными. Изначально написал такую программу. Но она не работают. Попробуйте запустить и увидите не проходимость компиляции. Какие еще есть варианты по убиранию нужной цифры из интегер?
Листинг программы
- var
- x, y, i : integer;
- begin
- writeln ('введите число');
- readln (x);
- writeln ('введите номер цифры');
- readln (i);
- y := x - x[i];
- writeln ('ответ', y);
- end.
Решение задачи: «Удалить из числа цифру с заданным номером»
textual
Листинг программы
- Function Rev(n: Int64): Int64;
- Begin
- While n > 0 do
- Begin
- Result := Result * 10 + n mod 10;
- n := n div 10;
- End;
- End;
- Function Del(n, index: Int64): Int64;
- Begin
- n := Rev(n);
- Result := Rev(n div Round(Power(10, index)) * Round(Power(10, index - 1)) + (n mod Round(Power(10, index - 1))));
- End;
- Var
- n, i: Int64;
- Begin
- Readln(n);
- Readln(i);
- Writeln(Del(n , i));
- End.
Объяснение кода листинга программы
- Первый шаг — ввод исходного числа и индекса цифры, которую необходимо удалить.
- Функция
Rev(n: Int64): Int64
используется для получения числа в обратном порядке. Начинает с обработки последней цифры введенного числа. - Результат умножается на 10 и к нему добавляется последняя цифра числа.
- Затем число делится на 10 и процесс повторяется до тех пор, пока число не станет равным 0.
- Результат функции
Rev(n: Int64): Int64
используется в функцииDel(n, index: Int64): Int64
. - Число делится на округленную в большую сторону мощность 10 в степени индекса.
- Результат делится на 10 в степени индекса — 1 и к нему добавляется остаток от деления исходного числа на 10 в степени индекса — 1.
- Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д