Добрый вечер!=)
Помогите, пожалуйста, решить вот такую задачу:
Дано целое число. Получить новое число, удалив из исходного все единицы. Порядок цифр оставить прежним.
У меня вот что получилось, но это срабатывает только в том случае, если число например 1234. Если взять 4321 (то есть в конце стоит 1), то просто выдает исходное=(((
Как мне исправить это? Что нужно дописать, чтобы даже если к в конце стоит 1, срабатывало?
Очень-очень нужно...((
program lab5;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
n,b,a: Integer;
begin
Writeln ('vvedite chislo' );
If n<0 then n:=-n;
Readln (n);
a:=n mod 10;
b:=a;
n:=n div 10;
repeat
a:= (n mod 10) ;
if (a<>1) then begin b:=b*10+a;
end;
n:= n div 10;
while a=1 do a:= (n mod 10)
until n=0 ;
a:=b mod 10;
n:=a;
b:=b div 10;
repeat
a:= (b mod 10) ;
n:=n*10+a;
b:= b div 10;
until b=0 ;
write (n);
Readln;
end.
Что если исходное число представить как массив цифр. Затем пройтись по этому массиву , заменив 1, к примеру, на -1. И по все тому же массиву восстановить новое число.
например, 2314
a0 a1 a2 a3
2 3 1 4
-------------
a0 a1 a2 a3
2 3 -1 4
Ответ 234
Если число отрицательное, то достаточно ввести какую-нибудь переменную sign и в конце домножить результат на sign.
Проблема была в том, что массивы нельзя было использовать( иначе я бы и сама решила ее, а так запуталась
Ну ок. Паскаль не помню и не хочу вспоминать.
// ввели число n
...............
public static int parseNum(int n) {
int result = 0; // результирующее число
int sign = (n > 0) ? 1 : -1; // переменная, кот. отвечает за знак. если число положит.,то 1, иначе -1
int des = 1;// переменная, отвечающая за степень 10 при восстановлении результирующего числа
n = Math.abs(n); // возьмем исходное число по модулю, тк его знак мы уже учитываем
while (n > 0) {
int ch = n % 10; // отщепляем с конца очередную цифру
if (ch != 1) { // если она не 1, то спокойно приписываем к результату, домножив на соотв. степень 10
result += ch * des; //result = result+ ch*des;
des *= 10;
}
n /= 10;
}
return sign * result;// получаем новое число с учетом знака
}
***
a+=b <-> a=a+b
a*=b <-> a=a*b и т.д.
.......................
/ - это div
% - это mod
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)