- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Max Difference You Can Get From Changing an Integer in C++
Suppose we have an integer num. We will apply the following steps exactly two times, the steps are like −
Pick a digit x in range 0 to 9.
Pick another digit y also in range 0 to 9. The digit y can be equal to x.
Replace all the occurrences of x in the decimal representation of num by y. The new integer cannot have any leading zeros, also the new integer cannot be of value 0.
Now consider a and b be the results of applying the operations to num the first and second times, respectively. Then find the max difference between a and b.
So, if the input is like 555, then the output will be 888 as the first-time pick x = 5 and y = 9 and store the new integer in a. The second time pick x = 5 and y = 1 and store the new integer in b.
So we have now a = 999 and b = 111 and maximum difference is = 999 - 111 = 888.
To solve this, we will follow these steps −
Define a function getMax(), this will take x,
s := convert x to string
a := '9'
i := 0
while (i < size of s and s[i] is same as '9'), do −
(increase i by 1)
if i < size of s, then −
a := s[i]
for initialize i := 0, when i < size of s, update (increase i by 1), do −
if s[i] is same as a, then −
s[i] := '9'
return s as number
Define a function getMin(), this will take x,
s := convert x to string
if s[0] is not equal to '1', then −
a := s[0]
for initialize i := 0, when i < size of s, update (increase i by 1), do −
if s[i] is same as a, then −
s[i] := '1'
Otherwise
if size of s is same as 1, then −
return 1
i := 0
a := '1'
while (i < size of s and s[i] <= '1'), do −
(increase i by 1)
if i < size of s, then −
a := s[i]
for initialize i := 1, when i < size of s, update (increase i by 1), do −
if s[i] is same as a, then −
s[i] := '0'
return s as number
From the main method do the following −
a := getMax(num)
b := getMin(num)
return |a - b|
Example
Let us see the following implementation to get better understanding −
#include <bits/stdc++.h> using namespace std; class Solution { public: int getMax(int x){ string s = to_string(x); char a = '9', b; int i = 0; while (i < s.size() && s[i] == '9') i++; if (i < s.size()) a = s[i]; for (int i = 0; i < s.size(); i++) { if (s[i] == a) { s[i] = '9'; } } return stoi(s); } int getMin(int x){ string s = to_string(x); char a; if (s[0] != '1') { a = s[0]; for (int i = 0; i < s.size(); i++) { if (s[i] == a) { s[i] = '1'; } } } else { if (s.size() == 1) { return 1; } int i = 0; a = '1'; while (i < s.size() && s[i] <= '1') i++; if (i < s.size()) a = s[i]; for (int i = 1; i < s.size(); i++) { if (s[i] == a) { s[i] = '0'; } } } return stoi(s); } int maxDiff(int num) { int a = getMax(num); int b = getMin(num); return abs(a - b); } }; main(){ Solution ob; cout << (ob.maxDiff(666)); }
Input
666
Output
888