разобраться, как это решить. Буду благодарен, если на С++ или Python. "Даны n и m. Нужно найти минимальное число строго больше n с суммой цифр m.
При том, что длина числа n <= 30000, m <= 270000."
Из-за большой длины числа просто перебором найти ответ нельзя. Не знаю что делать.​

afanasevaboom123 afanasevaboom123    3   06.01.2021 13:08    0

Ответы
leeJLZeel leeJLZeel  05.02.2021 13:17

Это пока только тестовое, можешь проверить, код сырой

n,m = map(int, input().split())

n = str(n)

sum_num_n = sum([int(i) for i in n])

if sum_num_n < m:

   def count_num(x):

       if x/9 > x//9 :

           return x//9 + 1

       return x//9

   count = count_num(m)

   n += '0'*(count-len(n))

   n = list(n[::-1])

   i = 0

   nujno = m - sum_num_n

   while nujno!= 0:

       if nujno+int(n[i]) < 9:

           n[i] = str(int(n[i])+nujno)

           break

       else:

           nujno-=9-int(n[i])

           n[i] = '9'

       i+=1

   print(''.join(n[::-1]))

else:

   n = list(n[::-1])

   i = 0

   nujno = m - sum_num_n

   while True:

       if i == len(n)-1 :

           n.append('0')

       if n[i+1] == 9:

           continue

       else:

           n[i+1] = str(int(n[i+1])+1)

           nujno-=1

           if int(n[i])+nujno > 0:

               n[i] = str(int(n[i])+nujno)

               break

           else:

               nujno+=int(n[i])

               n[i] = '0'

       if nujno == 0:

           break

       i+=1

   print(''.join(n[::-1]))

   

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика