给定正数的所有数字的总和

Man*_*shS 6 java algorithm

方法返回应该如果输入一个数字,假设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)

  • 这是一个很棒的解决方案 (3认同)
  • 这是完全错误的.sumDigit(77)返回5而不是14.它总和> 9 (2认同)

Roh*_*ain 8

您正在寻找的是数字根.所以这是使用第一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)


Gau*_*rav 7

    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你没有添加全部数字..在中间本身你一直在添加最正确的数字.