Дано число n. Найдите такой его делитель d - Pascal ABC
Формулировка задачи:
Скажу честно и прямо, сделайте за меня.
Будем говорить, что число a лучше числа b, если сумма цифр a больше суммы цифр числа b, а в случае равенства сумм их цифр, если число a меньше числа b. Например, число 124 лучше числа 123, так как у первого из них сумма цифр равна семи, а у второго — шести. Также, число 3 лучше числа 111, так как у них равны суммы цифр, но первое из них меньше.
Дано число n. Найдите такой его делитель d (само число n и единица считаются делителями числа n), что любой другой делитель c числа n лучше, чем d.
Входные данные
Первая строка входного файла INPUT.TXT содержит целое число n (1 ≤ n ≤ 105000).
Выходные данные
В выходной файл OUTPUT.TXT выведите ответ на задачу.
Примеры
INPUT.TXT
10
OUTPUT.TXT
10
-----------------------
INPUT.TXT
239
OUTPUT.TXT
1
P.S. знаю подобное есть в инете, но оно не совсем правильно работает
Решение задачи: «Дано число n. Найдите такой его делитель d»
textual
Листинг программы
var f:text; a,d,s,min,i,b,ch:integer; begin assign(f,'divisor.in'); reset(f); readln(f,a); close(f); s:=0; b:=a; min:=0; while b>0 do begin s:=s+b mod 10; b:= b div 10; end; min:=s; ch:=a; s:=0; for i:=a div 2 downto 1 do if a mod i=0 then begin b:=i; while b>0 do begin s:=s+b mod 10; b:= b div 10; end; if s<min then begin min:= s; ch:=i; end; s:=0; end; assign(f,'divisor.out'); rewrite(f); writeln(f,ch); close(f); end.
Объяснение кода листинга программы
В данном коде происходит поиск делителя числа n.
- Переменная f инициализируется как файл ввода.
- Число n считывается из файла в переменную a.
- Переменные a, d, s, min, i, b, ch инициализируются как целочисленные.
- Закрывается файл ввода.
- Переменная s инициализируется как сумма цифр числа n.
- Переменная b инициализируется как произведение числа n на 10.
- Минимальное значение для переменной s инициализируется как сумма цифр числа n.
- Переменная ch инициализируется как число n.
- Цикл while начинается.
- Переменная s инициализируется как сумма цифр числа n, полученного путем деления числа n на 10.
- Переменная b инициализируется как частное числа n на 10.
- Цикл while продолжается до тех пор, пока b не станет равным нулю.
- Минимальное значение для переменной s обновляется, если сумма цифр числа n, полученного путем деления числа n на 10, становится меньше текущего минимального значения.
- Переменная ch обновляется, если текущая сумма цифр числа n становится меньше текущего минимального значения.
- Цикл for начинается.
- Если число n делится на i без остатка, то переменная b инициализируется как i, и цикл while повторяется до тех пор, пока b не станет равным нулю.
- Если цикл for завершается и текущая сумма цифр числа n меньше минимального значения, то минимальное значение обновляется, и переменная ch обновляется.
- Цикл for завершается.
- Файл вывода переименовывается как
divisor.out
. - Переменная s инициализируется как 0.
- Переменная b инициализируется как 0.
- Цикл while начинается.
- Переменная s инициализируется как 0, полученная путем деления числа n на 2.
- Цикл while продолжается до тех пор, пока b не станет равным нулю.
- Если цикл while завершается и текущая сумма цифр числа n меньше минимального значения, то минимальное значение обновляется.
- Файл вывода закрывается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д