通过C ++更改整数可以获得最大的不同

假设我们有一个整数num。我们将正确地执行以下步骤两次,步骤类似于-

  • 在0到9的范围内选择一个数字x。

  • 在0到9的范围内选择另一个数字y。数字y可以等于x。

  • 将num的十进制表示形式中所有出现的x替换为y。新整数不能有任何前导零,新整数也不能具有值0。

现在,将a和b分别视为将运算分别应用于num和num的结果。然后找到a和b之间的最大差。

因此,如果输入类似于555,则输出将为888,这是首次选择x = 5和y = 9并将新的整数存储在a中。第二次选择x = 5和y = 1并将新的整数存储在b中。

因此我们现在有a = 999和b = 111,最大差为= 999-111 = 888。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个函数getMax(),它将取x,

  • s:=将x转换为字符串

  • 一个:='9'

  • i:= 0

  • 而(i <s和s [i]的大小与'9'相同),则执行-

    • (将i增加1)

  • 如果i <s的大小,则-

    • a:= s [i]

  • 对于初始化i:= 0,当i <s的大小时,更新(将i增加1),执行-

    • s [i]:='9'

    • 如果s [i]与a相同,则-

  • 返回s作为数字

  • 定义一个函数getMin(),它将取x,

  • s:=将x转换为字符串

  • 如果s [0]不等于'1',则-

    • 如果s [i]与a相同,则-

    • s [i]:='1'

    • a:= s [0]

    • 对于初始化i:= 0,当i <s的大小时,更新(将i增加1),执行-

    • 除此以外

      • 如果s [i]与a相同,则-

      • s [i]:='0'

      • a:= s [i]

      • (将i增加1)

      • 返回1

      • 如果s的大小等于1,则-

      • i:= 0

      • 一个:='1'

      • 而(i <s的大小和s [i] <='1'),则执行-

      • 如果i <s的大小,则-

      • 对于初始化i:= 1,当i <s的大小时,更新(将i增加1),-

      • 返回s作为数字

      • 从主要方法中执行以下操作-

      • 一个:= getMax(num)

      • b:= getMin(num)

      • 返回| a-b |

      例 

      让我们看下面的实现以更好地理解-

      #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));
      }

      输入值

      666

      输出结果

      888