我必须构建一个方法来添加参数中给出的字符串的每个数字,直到只剩下1个数字,例如1234 = (1+2+3+4) = 10 = (1+0) = 1
。
起初,我认为递归调用或while循环应该没问题。但有更聪明的方法吗?或许使用模数?
1234 % 9 = 1
这似乎有用......但不是:9%9
不等于9
,而是0
。
有没有办法在没有递归/ for / while的情况下构建这个函数?
答案 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;
}
}