通过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