Largest number with one swap allowed in C++


In this tutorial, we are going to write a program that finds the largest number with a single swap.

Let's see the steps to solve the problem.

  • Initialise the number n.
  • Convert the integer to string.
  • Write a loop that iterates from the ending of the string.
    • Find the max digit and index.
    • If the current digits is less than the max digit, then update start index with current index and end index with max digit index.
  • If the start index is -1, then return n.
  • Else swap the digits in the start and end indexes.
  • Return the integer by converting.

Example

Let's see the code.

 Live Demo

#include <bits/stdc++.h>
using namespace std;
int getLargestNumber(int n) {
   int maxDigit = -1;
   int maxDigitIndex = -1;
   int startIndex = -1;
   int endIndex = -1;
   string nInStr = to_string(n);
   for (int i = nInStr.size() - 1; i >= 0; i--) {
      if (nInStr[i] > maxDigit) {
         maxDigit = nInStr[i];
         maxDigitIndex = i;
         continue;
      }
      if (nInStr[i] < maxDigit) {
         startIndex = i;
         endIndex = maxDigitIndex;
      }
   }
   if (startIndex == -1) {
      return n;
   }
   swap(nInStr[startIndex], nInStr[endIndex]);
   return stoi(nInStr);
}
int main() {
   int n = 678;
   cout << getLargestNumber(n) << endl;
   return 0;
}

Output

If you run the above code, then you will get the following result.

876

Conclusion

If you have any queries in the tutorial, mention them in the comment section.

Updated on: 09-Apr-2021

343 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements