Удалить цифру в числе
У меня есть число, в котором нужно удалить цифру, соседние значения которой дают в сумме больше 14.
Например, 123456789. Берём 9. У неё соседние значения - это 8 и 0. 0 т.к. справа ничего нет. Сумма девятки - 8. Далее 8. Слева и справа 7 и 9. Сумма - 16. Соответственно 8 убираем. Далее 7. Соседние значения - это 6 и 8. Но как мы видим 8 остаётся для дальнейшего выполнения алгоритма и тем не менее сумма этих чисел не более 14. 7 остаётся. И т.д. Вывод: 12345679
Написал этот код недавно, но встал в ступор и забил на него. Сейчас решил вспомнить о нем. В данном примере должно быть выведено 99, ошибка скорее всего у:
SET @lastCount = @x % 10 /* Вычисление последнего значения в числе */
--- Объявление переменных
DECLARE @x INT = 0,
@lastCount INT = 0,
@nextCount INT = 0,
@summ INT = 0,
@count INT = 0,
@putnum INT = 0,
@cnt INT = 0,
@values INT = 0,
@x2 int = 0
---
--- Присваивание
SET @x = 9999
SET @values = @x
set @x2 = @x
SET @putnum = @x
---
--- Цикл подсчёта цифр
WHILE (@values <> 0 or @cnt = 0) BEGIN
SET @cnt = @cnt + 1
SET @values = @values / 10
END
---
--- Алгоритм
WHILE @count < @cnt
BEGIN
SET @nextCount = @x / 10 % 10 /* Вичисление следующего значения в числе */
SET @summ = @nextCount + @lastCount /* Сумма двух соседних значений */
/* Если сумма двух соседей какого-то числа больше 14, то оно удаляется, но остаётся в памяти для вычисления следующей суммы другого числа */
IF @summ > 14
set @putnum = (SELECT STUFF(@putnum, LEN(@putnum) - CHARINDEX(CAST(@nextCount as varchar(100)), REVERSE(@putnum))+1, 1, ''))
set @x2 = @putnum
set @x = cast(@putnum as int)
SET @lastCount = @x % 10 /* Вычисление последнего значения в числе */
set @x = cast(@putnum as int)
SET @count = @count + 1
END
---
PRINT(@putnum)