Дано число 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 меньше минимального значения, то минимальное значение обновляется.
- Файл вывода закрывается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д