递归 - 卡塔挑战

时间:2016-04-21 19:02:02

标签: java recursion

挑战是在数字末尾删除任何零。两个数字内的零值是可以的。 EG:

  

14000 == 14 //删除所有结束零   10300 == 103 //删除所有结束零

我写了这个函数来解决问题:

    public class NoBoring {
    public static int noBoringZeros(int n) {
      System.out.println(n); // testing 
      System.out.println(Math.abs(n % 10)); //testing
        if(Math.abs(n % 10) != 0){
          return n;
        }
      return noBoringZeros(n/10);
    }
}

不幸的是,这对负输入无效。请参阅下面测试用例的输出:

//LD = last digit of the number
//ZR is the zero removed
        Fixed Tests: noBoringZeros
    1450
    0 //LD
    145 //ZR
    5 //LD
    960000 
    0 //LD
    96000 //ZR
    0 //LD
    9600 //ZR
    0 //LD
    960 //ZR
    0 //LD
    96 //ZR
    6 //LD
    1050
    0 //LD
    105 //ZR
    5 //LD
    -1050
    0 //LD
    -105 //ZR
    5 //LD
    -105 
    5
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0

我完全不明白为什么会失败?我本以为n%10的退出声明不是= 0会导致n的返回,但对于负数而言似乎不是吗?

3 个答案:

答案 0 :(得分:1)

如果您对数学函数不满意,可以使用String fucntions:

     int n = -22400 ; // You want -224           
     String str = String.valueOf(n);

     while(str.endsWith("0")){

            if (str != null && str.length() > 0 && str.charAt(str.length()-1)=='0') {

                 str = str.substring(0, str.length()-1);
            }

        }

     System.out.println(Integer.parseInt(str));

答案 1 :(得分:1)

您的代码存在负数和零输入问题。一种解决方案是单独处理它们。这是伪代码,只是为了确保你自己完成一些工作:

function void noBoringZeros(int n)

  if (n < 0) then

    // Deal with negative n.
    print "-" + nbz(-n)

  else if (n = 0) then

    // Deal with zero n.
    print 0  // or "All zeros" or whatever.

  else

    // Deal with positive n.
    print nbz(n)

  end if

end function

这里nbz()是一个简单的函数,可以从正数中删除尾随零:

function int nbz(int n)

  // n >= 1 assumed.
  int temp <- n
  while (temp MOD 10 = 0)
    temp <- temp DIV 10
  end while

  return temp

end function

答案 2 :(得分:0)

    public class NoBoring {
    public static int noBoringZeros(int n) {
      System.out.println(n);
      System.out.println(Math.abs(n % 10));

        if(Math.abs(n % 10) != 0 || n == 0){
          return n;
        }

      return noBoringZeros(n/10);
    }
}

没有检查n == 0;