Дано натуральное число n.
Найдите и выведите квадрат разности максимального и минимального чисел,
составленных из цифр числа n.
Например, если задано
число 30605, то максимальным числом, составленным их цифр этого числа
будет число 65300, а минимальным 356 (наименьшим
будет 00356, но ведущие нули не считаются). Искомый квадрат разности равен
(65300 – 356 ) * (65300 – 356) = 4217723136.
Вход. Одно натуральное число n (1 ≤ n ≤ 109).
Выход. Выведите требуемый квадрат
разности.
Пример входа |
Пример выхода |
30605 |
4217723136 |
строки
Прочитаем число в символьный массив.
Отсортируем цифры по убыванию, получим наибольшее число a. Отсортируем цифры по возрастанию, получим наименьшее число b. Вычислим их квадрат разности.
Реализация алгоритма
Объявим символьный
массив.
char s[20];
Читаем
строку.
gets(s);
Сортируем цифры по убыванию. Преобразовываем строку в
число a.
sort(s, s + strlen(s), greater<char>());
sscanf(s, "%lld", &a);
Сортируем цифры по возрастанию. Преобразовываем строку
в число b.
sort(s, s + strlen(s), less<char>());
sscanf(s, "%lld", &b);
Выводим искомый квадрат разности.
printf("%lld\n", (a - b) * (a
- b));
Реализация алгоритма – string
#include <iostream>
#include <set>
#include <string>
#include <algorithm>
using namespace std;
long long a, b;
string s;
int main(void)
{
cin >> s;
sort(s.begin(),
s.end(), greater<char>());
sscanf(s.c_str(),
"%lld", &a);
sort(s.begin(),
s.end(), less<char>());
sscanf(s.c_str(),
"%lld", &b);
printf("%lld\n", (a - b) * (a
- b));
return 0;
}
Java реализация
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new
Scanner(System.in);
String s[] = con.nextLine().split("");
// s =
{"1", "2", "3", "4", "5",
"6"}
Arrays.sort(s);
long a = Integer.parseInt(String.join("", s));
Arrays.sort(s,Collections.reverseOrder());
long b = Integer.parseInt(String.join("", s));
System.out.println((a - b) * (a - b));
con.close();
}
}