На вход программе поступает натуральное число не превышающее 10^30 Требуется написать программу, которая, используя все цифры этого числа, формирует новое натуральное число, причем самое маленькое из всех возможных той же разрядности. На любом языке (лучше конечно на C++ либо Pascal ABC)
#include <iostream> #include <string> #include <algorithm> int main() { std::string number; std::cin >> number; std::sort(number.begin(), number.end()); if (number[0] == '0') { for (int i = 1; i < number.length(); i++) { if (number[i] != '0') { std::swap(number[0], number[i]); break; } } } std::cout << number << std::endl; return 0; }
Эта программа сначала считывает число как строку, затем сортирует все цифры по возрастанию. Если первая цифра полученного числа равна нулю, она меняется местами с первой ненулевой цифрой. Наконец, программа выводит отсортированную строку, которая и будет самым маленьким возможным числом той же разрядности.
Вот пример программы на языке C++:
#include <iostream>#include <string>
#include <algorithm>
int main() {
std::string number;
std::cin >> number;
std::sort(number.begin(), number.end());
if (number[0] == '0') {
for (int i = 1; i < number.length(); i++) {
if (number[i] != '0') {
std::swap(number[0], number[i]);
break;
}
}
}
std::cout << number << std::endl;
return 0;
}
Эта программа сначала считывает число как строку, затем сортирует все цифры по возрастанию. Если первая цифра полученного числа равна нулю, она меняется местами с первой ненулевой цифрой. Наконец, программа выводит отсортированную строку, которая и будет самым маленьким возможным числом той же разрядности.