如何单独读取整数数字

时间:2013-09-18 06:17:30

标签: java

大家好我有个问题。所以我有一个任务,我必须创建一个程序,递归计算整数中所有数字的总和。 IE整数123(1 + 2 + 3)= 6。 如何从第一个数字开始并继续前进,直到没有其他数字? 这就是我到目前为止......

import java.util.*;

public class sum 
{    
    /**
     * @param args
     */
    public static void main(String[] args) 
    {           
        System.out.println(sumDigits(123))   
    }

    public static  int sumDigits(int n)
    {
        while (n.hasNext())
        {
            return n.charAt(n.length) + sumDigits(n.charAt((n.length - 1)))
        }
    }
}

现在我知道我正在使用(hasNext和charAt,我不应该...)但是int的等价物是什么?

6 个答案:

答案 0 :(得分:5)

您需要进行两项操作:

获取数字的最后一位数:n % 10

获取没有最后一位数字的数字:n / 10

在循环中使用这两个操作将获得该数字的所有数字。

答案 1 :(得分:4)

简单的递归解决方案:从数字末尾开始,在每一步中,您都会获得数字的最后一位数字(m),并且您的数字除以10,即next 。如果在某个步骤中由于n / 10得到0 - 那么它就是递归的结束,你可以返回你的余数。否则,您可以使用next再次调用您的函数。

public static  int sumDigits(int n)
{
    int m = n % 10, next = n / 10;
    if (next == 0) {
        return m;
    }
    return m + sumDigits(next);
}

答案 2 :(得分:1)

您可以使用递归尝试此操作:

public int sumDigits(int n) {
    int abs = Math.abs(n), lastdigit = 0, sum = 0;
    if(n != 0) {
        lastdigit = abs % 10;
        sum = lastdigit + sumDigits(abs / 10);
    }
    return sum;
}

这里有一些测试:

@Test
public void sumDigits() {
    Assert.assertEquals(3, sumDigits(12));
    Assert.assertEquals(6, sumDigits(123));
    Assert.assertEquals(10, sumDigits(1234));
    Assert.assertEquals(15, sumDigits(12345));
    Assert.assertEquals(21, sumDigits(123456));
    Assert.assertEquals(28, sumDigits(1234567));
    Assert.assertEquals(28, sumDigits(7654321));
    Assert.assertEquals(28, sumDigits(-7654321));
    Assert.assertEquals(44, sumDigits(2056239854));
    Assert.assertEquals(46, sumDigits(Integer.MAX_VALUE)); // 2147483647
}

答案 3 :(得分:0)

第一种方式:

public static int sumDigits(int n) {                
            int validate = n % 10;
            int digit = n / 10;
            if (validate == 0) 
                return validate;
            return validate + sumDigits(digit);
        }

第二路:

public static int sumDigits(int n) {    
            String[] temp = Integer.toString(n).split("");
            int sum = 0;
            for (int i = 1; i < temp.length; i++)// i=1 to skip first first empty value
                sum += Integer.parseInt(temp[i]);    
            return sum;   
         }

测试:

System.out.println("" + sumDigits(123)); // For both cases same O/p

输出:

6

答案 4 :(得分:0)

如何递归地解决问题

考虑基本情况:如果数字<10,那么我们只想返回该数字

其他案件有哪些?在这种情况下,只有另一种情况:我们有更多的数字,我们需要添加第一个数字,然后处理其余的数字

public int sumDigits(int n){
     return sumDigitsHelper(n,0);
}

public int sumDigitsHelper(int n, int sum){
     if(n<10)
          return sum+n;
     return sumDigitsHelper(n/10,sum+n%10);

}

答案 5 :(得分:0)

抱歉,错过了递归的要求。

public static int sumDigits(int n) {
  int sum = sumDigits0(n, 0);
  if (sum < 10) {
    return sum;
  }
  return sumDigits(sum);
}

private static int sumDigits(int n, int sum) {
  if (n == 0) {
    return sum;
  }
  return sumDigits(n/10, sum + (n%10));
}