添加数字位

时间:2016-04-14 13:21:46

标签: java algorithm math

我必须构建一个方法来添加参数中给出的字符串的每个数字,直到只剩下1个数字,例如1234 = (1+2+3+4) = 10 = (1+0) = 1

起初,我认为递归调用或while循环应该没问题。但有更聪明的方法吗?或许使用模数?

1234 % 9 = 1这似乎有用......但不是:9%9不等于9,而是0

有没有办法在没有递归/ for / while的情况下构建这个函数?

4 个答案:

答案 0 :(得分:8)

我在很久以前的某个地方找到了这个简单的算法。实际上,它与%9一起使用,但是如果该数字的模数等于0,则必须检查该情况。

我敢打赌,有更多方法可以达到结果,最简单的代码就像Java一样:

int sumAllDigits(int n) {
    return (n%9 == 0 && n!=0) ? 9 : n%9;
}

答案 1 :(得分:5)

int sumAllDigits(int n) {
    return (n-1)%9 + 1;
}

适用于所有n> = 1

答案 2 :(得分:4)

x%9确实有效。唯一的障碍是当你得到0时,你不知道你是否应该得到0或9.但是你可以回顾一下原来的数字:唯一可以返回0的是0.所以:< / p>

public int digitSum(int input) {
    if ( input == 0 ) {
        return 0;
    }
    int ret = input % 9;
    if ( ret == 0 ) {
        return 9;
    }
    return ret;
}

答案 3 :(得分:0)

使它成为一个字符串,然后通过char计算char char。如果结果大于9转换为字符串并重复。

public class FakeTest {

    @Test
    public void testCalc() {
        Assert.assertEquals("1234 -> 1", 1, calc(1234));
    }

    private int calc(int value) {
        String svalue = String.valueOf(value);
        int sum = 0;
        for (char c : svalue.toCharArray()) {
            sum += (c - '0');
        }
        return sum > 9 ? calc(sum) : sum;
    }
}