首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从int中删除的方法。

问从int中删除的方法。
EN

Stack Overflow用户
提问于 2015-10-22 19:32:43
回答 2查看 141关注 0票数 1

到目前为止,这就是我所能想到的。

代码语言:javascript
复制
  public static int evens(int n)
  {           
  String num = "" + n;
  if (n>1) {

     if (n%2 == 0) {
        return n + evens(n%10);
     }
     else {
        int len = num.length();
        num = num.substring(0, len-1);
        n = Integer.parseInt(num);
        return n + evens(n%10);
     }
  }
  else {
     return n;
  }      
 }

我的逻辑是将整数设为字符串,然后每一次除以10,使下一个数字(从右到左)位于1的位置(使用整数,我相信应该删除前一个数字)。然后,我尝试使用%2来查找剩余部分,如果不是==0,则1位置中的数字是奇怪的,并以某种方式从字符串中删除该数字(方法是取长度,然后从0到len-1取一个子字符串)。我认为我的问题可能包括逻辑,显然,我的语法有问题,定义字符串的方法的第一行会导致它通过每次递归重新定义,从而使它变得混乱。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-22 20:23:50

紧凑的非字符串版本:

代码语言:javascript
复制
public static int evenDigits(int n) {
    return (n&1) != 0 ? evenDigits1(n/10) : n < 10 ? n : n%10 + evenDigits(n/10)*10;
}

解释:

代码语言:javascript
复制
public static int evenDigits(int n) {
    if ((n & 1) != 0) {
        // Last digit is odd, so remove it. Recurse on higher digits
        return evenDigits(n / 10);
    }
    if (n < 10) {
        // Single digit number is even, so we're done
        return n;
    }
    // Keep last digit (it is even). Recurse on higher digits
    return n % 10 + evenDigits(n / 10) * 10;
}
票数 1
EN

Stack Overflow用户

发布于 2015-10-22 19:40:48

的确,有几个but主要是由冗余逻辑引起的,但它可以很容易地得到(简化和)修复:

代码语言:javascript
复制
public static String evenDigits(int n)
{
    if (n > 0) {
        if (n % 2 == 0) {
            return n % 10 + "" + evenDigits(n / 10);
        } else {
            return evenDigits(n / 10) + "";
        }
    } else {
        return "";
    }
}

请特别注意返回语句中参数的“切换”:

代码语言:javascript
复制
return n + evenDigits(n%10);

至:

代码语言:javascript
复制
return n % 10 + "" + evenDigits(n / 10);

通过返回n % 10,您将返回您正在处理的当前数字(这正是您想要的),并使用n / 10递归地发送该数字的"rest“。

一种不同的方法可以是,根本不使用String。将它与迭代方法(相对于上面建议的递归方法)结合起来,结果如下所示:

代码语言:javascript
复制
public static int evenDigits(int n) {
    int res = 0;
    int mag = 0;
    while (n > 9) {
        int digit = n % 10;
        n /= 10;
        if (digit % 2 == 0) {
            res += Math.pow(10, mag) * digit;
            mag++;
        }
    }
    return res;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33289212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档