方法返回应该如果输入一个数字,假设345,那么输出应该是3 + 4 + 5 = 12 - > 1 + 2 = 3.我在这里做错了什么?
public class DigitSum
{
int Sum=0;
public int compute( int MethParam )
{
int rem = MethParam%10;
Sum+=rem;
MethParam = MethParam/10;
if(MethParam>10)
compute(MethParam);
return Sum+MethParam;
}
public static void main(String[] args)
{
DigitSum ds = new DigitSum();
System.out.println(ds.compute(435));
}
}
Run Code Online (Sandbox Code Playgroud)
Rah*_*hul 26
O(1)Algo为数字之和:
取任何数字的模数9将返回该数字的数字之和,直到获得单个数字.
如果数字是9的倍数,则总和将为9
一个班轮:
public int sumDigit(int n){
return (n%9 == 0 && n != 0) ? 9 : n%9;
}
Run Code Online (Sandbox Code Playgroud)
替代实施:
public int sumDigit(int n){
int sum = n % 9;
if(sum == 0){
if(n > 0)
return 9;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
您正在寻找的是数字根.所以这是使用第一wiki页链接的公式的更好的解决方案.
没有递归: -
public static int compute( int n ) {
return n - 9 * ((n - 1) / 9);
}
Run Code Online (Sandbox Code Playgroud)
而且,万一你想要(我认为你不会这样),这里是一个单行 (使用递归): -
public static int compute( int n ) {
return n < 10 ? n : compute(n % 10 + compute(n / 10));
}
Run Code Online (Sandbox Code Playgroud)
public int FindSumDigit(int number)
{
if (number < 10) return number;
int sum = 0;
while (number > 0)
{
sum += number % 10;
number = number / 10;
}
return FindSumDigit(sum);
}
Run Code Online (Sandbox Code Playgroud)
找到我的代码... Poon你没有添加全部数字..在中间本身你一直在添加最正确的数字.
| 归档时间: |
|
| 查看次数: |
23914 次 |
| 最近记录: |