Найти НОД с наибольшей суммой цифр - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Думаю условие понятное, можно только пояснить на примере. НОД чисел 220 и 440 это 220, а с наибольшей суммой цифр 55. и еще (1<=a,b<=10^9) Достаточно будет алгоритма, думаю с кодом проблем особых не будет.

Решение задачи: «Найти НОД с наибольшей суммой цифр»

textual
Листинг программы
  1. function gcd(const a, b: LongInt): LongInt;
  2. begin
  3.   if b = 0 then gcd := a else gcd := gcd(b, a mod b);
  4. end;
  5.  
  6. function sum_dig(num: LongInt): LongInt;
  7. var sum: LongInt;
  8. begin
  9.   sum := 0;
  10.   while num > 0 do begin
  11.     sum := sum + num mod 10;
  12.     num := num div 10;
  13.   end;
  14.   sum_dig := sum;
  15. end;
  16.  
  17. var a, b, g, i, ans, max_sum, sum: LongInt;
  18. begin
  19.   Readln(a, b);
  20.   max_sum := 0;
  21.   g := gcd(a, b);
  22.   for i := 1 to Round(sqrt(g)) do
  23.     if g mod i = 0 then begin
  24.       sum := sum_dig(i);
  25.       if sum > max_sum then begin
  26.         max_sum := sum;
  27.         ans := i;
  28.       end;
  29.       sum := sum_dig(g div i);
  30.       if sum > max_sum then begin
  31.         max_sum := sum;
  32.         ans := g div i;
  33.       end;
  34.     end;
  35.   Writeln(ans);
  36. end.

Объяснение кода листинга программы

  1. Создается функция gcd, которая принимает два аргумента типа LongInt и возвращает наибольший общий делитель этих двух чисел. Алгоритм Евклида используется для нахождения НОДа.
  2. Создается функция sum_dig, которая принимает один аргумент типа LongInt и возвращает сумму цифр этого числа. Функция использует цикл while для сложения цифр числа последовательно.
  3. Создается переменная a и b для хранения введенных пользователем чисел.
  4. Вызывается функция gcd с аргументами a и b и сохраняется результат в переменной g.
  5. Инициализируется переменная max_sum значением 0.
  6. Запускается цикл for, который выполняется от 1 до округленного значения квадратного корня из g.
  7. В каждой итерации цикла проверяется, делится ли g на текущее значение i без остатка. Если да, то вызывается функция sum_dig с аргументом i, и если сумма цифр больше max_sum, то обновляется значение max_sum и ans устанавливается равным i.
  8. После завершения цикла, значение max_sum будет содержать наибольший общий делитель, а значение ans будет содержать соответствующий делитель.
  9. Выводится значение ans.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы