Дублировать максимальную цифру из числа
Подскажите пожалуйста. Дано рандомное число, введённое с клавиатуры.Нужно было найти максимальную цифру в числе, это сделал. Теперь нужно максимально большую цифру из этого числа продублировать(их может быть несколько). Например: ввели число 582483 - ответ должен быть 58824883. Заранее спасибо за помощь
#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
int n, x;
int max;
cout << "Введите число\n";
cin >> n;
max = n % 10; //находим последнюю цифру и считаем ее наибольшей
while (n != 0) //находим максимальное //Просматриваем все цифры от 0 до 9
{
x = n % 10;
if (x > max)
{
max = x;
}
n = n / 10;
}
}```
Ответы (2 шт):
Автор решения: S.H.
→ Ссылка
Я попробовал учесть случай отрицательного числа и сделать это максимально на стандартных функциях.
Поучилось как то так:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n;
cout << "Введите число\n";
cin >> n;
bool nsign=n<0;
n = n<0 ? -n : n;
// разбиваем на цифры
vector<int> digits;
while(n!=0){
int d=n%10;
digits.push_back(d);
n=n/10;
}
// определяем максимальную цифру
auto max_iter=max_element(digits.begin(), digits.end());
auto maxd=digits[distance(digits.begin(), max_iter)];
// переворачиваем вектор
reverse(digits.begin(), digits.end());
// выводим знак
cout << (nsign ? "-" : "");
// выводим цифры, дублируя максимальную
for( auto& x : digits ){
cout << x;
if (x==maxd)
cout << x;
}
cout << endl;
}
PS. И, кстати, думая, как не делать reverse вектору - наткулся на обсуждение reverse adapter'ов
Автор решения: Mikhailo
→ Ссылка
А вот так мы не ограничены типом и размером числа, можем вводить хоть -3.1415E92:
int main() {
string n;
cin >> n;
char M = '0';
for (char c : n) if (M < c && isdigit(c)) M = c;
for (char c : n) {
cout << c;
if (M == c) cout << c;
}
}