从另一个数字中删除所有9的Java方法?

时间:2015-11-04 19:58:45

标签: java methods

我正在寻找一个从整数中删除所有9个的方法:

public int noNine(int i){
    int res = 0;
    return res;
}

示例:

noNine(0)->0
noNine(1991)->11
noNine(99)->0
noNine(19293949)->1234

等等。

不允许使用字符串,也没有外部方法。

你能帮助我吗?

谢谢!

Eddie Texas

4 个答案:

答案 0 :(得分:6)

int removeNine(int n)
{
  int result = 0;
  int mul = 1;
  while(n > 0)
  {
    //check if current digit is 9. if 9 then do nothing
    if(n % 10 == 9)
    {
      n = n / 10;
      continue;
    }
    else
    {
      //if not 9 then add this to result after multiplying by current mul
      result += mul * (n % 10);
      //update mul so that the next digit is added according to power of 10
      mul = mul * 10;
    }
    n = n / 10;
  }
  return result;
}

答案 1 :(得分:3)

您可以通过多种方式解决此问题

  1. 使用for循环遍历每个字符
  2. 使用递归
  3. 我将详细介绍第二种技术:

    使用此技术,您可以使用整数或字符串来解决问题。我会按照你所说的那样使用汉堡:

    1. 使用%10
    2. 获取最后一位数字
    3. 如果是9
    4. ,请将其删除
    5. 递归检查每个数字(*记住有一个基本情况!)
    6. 返回最终值

      public int noNine(int i){
          if(i < 10){
              if(i == 9)
                  return 0;
              else
                  return i;
          }
          int lastDigit = i % 10;
          if(lastDigit == 9)
              return noNine(i / 10);
          else
              return noNine(i / 10)*10+lastDigit;    
      }
      
    7. 这里的关键点是:n % 10 = last digit of nn / 10 = all previous digits of n。这是因为Java中的整数除法!

答案 2 :(得分:0)

这里的版本以不同于ritratt的方式编写,以防你不理解他的版本:

public int noNines(int num) {
    int multiplier = 0;
    int result = 0;
    while (num > 0) {
      int digit = num % 10;
      System.out.println("digit=" + digit);
      if (digit == 9) {
        //ignore
      } else {
        System.out.println("Adding " + (digit * (int)Math.pow(10, multiplier)));
        result += digit * (int)Math.pow(10, multiplier);
        multiplier++;
      }
      num = num / 10;
    }

    return result;
  }

我离开了控制台输出,因此您可以看到该方法的实际效果。

答案 3 :(得分:0)

你可以这样做:

public int removeNines(int n) {
    int returnValue = 0, multiplier = 1;
    while (n > 0) {
        if (n%10 != 9) {
            returnValue += (n%10) * multiplier;
            multiplier *= 10;
        }
        n /= 10;
    }
    return returnValue;
}

这会遍历所有数字,如果它不是9,则将其添加到输出中。经过测试here并正常工作