diff --git a/src/problems/1432-max-difference-you-can-get-from-changing-an-integer.cpp b/src/problems/1432-max-difference-you-can-get-from-changing-an-integer.cpp new file mode 100644 index 0000000..ab2bd04 --- /dev/null +++ b/src/problems/1432-max-difference-you-can-get-from-changing-an-integer.cpp @@ -0,0 +1,94 @@ +/** +* [1432] Max Difference You Can Get From Changing an Integer + */ +#include +#include +using namespace std; + + +// submission codes start here + +class Solution +{ +public: + int maxDiff(int num) + { + string numString = to_string(num); + + // Select the first, not 9 number. + int targetPos = 0; + while (targetPos < numString.size() - 1) + { + if (numString[targetPos] != '9') + { + break; + } + + targetPos += 1; + } + + auto maxNumber = replaceDigit(numString, numString[targetPos], '9'); + + targetPos = 0; + char minimumChar = '1'; + // If the first number is not 1, select the first number. + // If the first number is 1, select next, not zero number. + if (numString[targetPos] == '1') + { + targetPos = 1; + minimumChar = '0'; + while (targetPos < numString.size()) + { + if (numString[targetPos] == '1') + { + // Can not replace 1 when the first number is 1. + targetPos += 1; + continue; + } + + if (numString[targetPos] != '0') + { + break; + } + + targetPos += 1; + } + } + + int minNumber = num; + if (targetPos != numString.size()) + { + minNumber = replaceDigit(numString, numString[targetPos], minimumChar); + } + + return maxNumber - minNumber; + } + + static auto replaceDigit(const string &num, char source, char target) -> int + { + int result = 0; + for (const char i : num) + { + if (i == source) + { + result = result * 10 + target - '0'; + } + else + { + result = result * 10 + i - '0'; + } + } + + return result; + } +}; + +// submission codes end + +TEST(P1432, Test1) +{ + ASSERT_EQ(888, Solution().maxDiff(555)); + ASSERT_EQ(8, Solution().maxDiff(9)); + ASSERT_EQ(888, Solution().maxDiff(111)); + ASSERT_EQ(80000, Solution().maxDiff(10000)); +} \ No newline at end of file