6

メソッドの戻り値は、数値を入力した場合、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));
  }
}
4

13 に答える 13

27

O(1)数字の合計のアルゴ:

任意の数値のモジュロ9を取ると、1桁の数値が取得されるまで、その数値の桁の合計が返されます。

数が9の倍数の場合、合計は9になります

一発ギャグ :

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

代替実装:

public int sumDigit(int n){

      int sum = n % 9;
      if(sum == 0){
          if(n > 0)
               return 9;
      }
      return sum;
}
于 2012-12-21T07:29:09.867 に答える
8

あなたが探しているのはdigital rootです。したがって、wikiリンクしたページの式を使用したより良い解決策があります。

再帰なし: -

public static int compute( int n ) {
    return n - 9 * ((n - 1) / 9);
}

そして、あなたが望む場合に備えて(私はあなたがそうするとは思わない)、ここにワンライナー (再帰の使用)があります: -

public static int compute( int n ) {
    return n < 10 ? n : compute(n % 10 + compute(n / 10));
}
于 2012-12-21T07:42:12.910 に答える
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);
    }

私のコードを見つけてください...プーン、あなたは数字全体を追加していませんでした..真ん中自体では、右端の数字を追加し続けていました。

于 2012-12-21T07:21:30.687 に答える
3

ここには多くの間違った答えがあります。OPが望むものは次のとおりです。

メソッドの戻り値は、数値を入力した場合 (345 と仮定)、出力は 3+4+5=12 --> 1+2 = 3 のようになります。

これは仕事をします:

public static int compute(int param) {
    int sum = 0;
    do {
        sum = 0;
        while (param > 0) {
            sum += param % 10;
            param /= 10;
        }
        param = sum;
    } while (sum >= 10);
    return sum;
}
于 2012-12-21T07:27:41.087 に答える
1

コード内で、再帰メソッドの呼び出しを取得するための値が適切に返されていません。

        if ((MethParam >= 10)){
            return compute(MethParam);
        }else
            return Sum + MethParam;
于 2012-12-21T07:29:34.043 に答える
1

メソッドをこれに変更すると、要求された結果が得られます。

public int compute(int methParam) {
    int sum = 0;
    for (int i = 0; methParam > 10; i++) {
        int currentDigit = methParam % 10;
        methParam = methParam / 10;
        sum = sum + currentDigit;
    }
    if (sum + methParam > 10) {
        return compute(sum + methParam);
    } else {
        return sum + methParam;
    }
}

sumフィールドにするのではなく、メソッド内の宣言を移動したことに注意してください。

于 2012-12-21T07:19:03.963 に答える
0

文字列ソリューションは次のとおりです。

public int compute( int MethParam )
{
    int sum = 0; 
    string meth = MethParam.ToString();        

    for (char x in meth) {
        sum += int.Parse(x);
    }
    if (sum >= 10) {
        return compute(sum);
    }
    else {
        return sum;
    }
}

このコードはJavaではなくC#であるため、擬似コードと見なしてください。

于 2012-12-21T07:34:42.747 に答える
0
public int compute( int param )
{
    int x = param % 10;
    int y = param / 10;

    if (y > 0)
        return x + compute(y);

    return x;
}

public int computeNonRec(int param) {
    int result = 0;
    while (param > 0) {
        result += param % 10;
        param /= 10;
    }
    return result;
}
于 2012-12-21T07:16:05.550 に答える
0

試す

 public int sumDigit(int n) {
        int sum = 0;
        while (n > 0) {
            sum += n % 10;
            number = n / 10;
        }
        return sum;
    }
于 2012-12-21T07:25:18.180 に答える
0

これの最短コードは -

int compute(int n){
    while(n > 9){
        n = n - 9;
    }
    return n;
}

ここで、n は、その桁の一部を計算する数値です。

編集:3桁の数字など、小さな数字に対してのみ効率的です。

編集:いくつかの回答をテストしました:

public class Test {
    public static void main(String [] args){
        int i = 0x0fefefef;

        long st1 = System.nanoTime();
        int n1 = sumDigit(i);
        long t1 = System.nanoTime() - st1;

        long st2 = System.nanoTime();
        int n2 = FindSumDigit(i);
        long t2 = System.nanoTime() - st2;

        long st3 = System.nanoTime();
        int n3 = compute(i);
        long t3 = System.nanoTime() - st3;

        long st4 = System.nanoTime();
        int n4 = compute1(i);
        long t4 = System.nanoTime() - st4;

        System.out.println("Tested for: "+i);
        System.out.println(n1+": "+t1);
        System.out.println(n2+": "+t2);
        System.out.println(n3+": "+t3);
        System.out.println(n4+": "+t4);
    }

    public static int sumDigit(int n){
      int sum = n % 9;
      if(sum == 0){
          if(n > 0)
               return 9;
      }
      return sum;
    }

    public static int FindSumDigit(int n)
    {
        if (n < 10) return n;
        int sum = 0;
        while (n > 0)
        {
            sum += n % 10;
            n = n / 10;
        }
        return FindSumDigit(sum);
    }

    public static int compute( int n ) {
        return n - 9 * ((n - 1) / 9);
    }

    public static int compute1(int n){
        while(n > 9){
            n = n - 9;
        }
        return n;
    }
}

上記のテストの結果は次のとおりです。

Tested for: 267382767
3: 2432
3: 1621
3: 810
3: 5354519
于 2012-12-21T08:07:15.160 に答える
0

変換が関係しているため、別のアプローチでは効率的ではない可能性があります。

private static int getUltimateSum(int input) {
    String inputStr = String.valueOf(input);
    int sum = 0;
    for (int i = 0; i < inputStr.length(); i++) {
        int digit = Integer.valueOf(String.valueOf(inputStr.charAt(i)));
        sum += digit;
    }
    if(sum > 9)
        return getUltimateSum(sum);
    else
        return sum;
}
于 2012-12-21T07:40:23.963 に答える
0

試す

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);
    else
        Sum+=MethParam;

        if(Sum>=10){
        int temp=Sum;
        Sum=0;
        compute(temp);
    }

         return Sum;  
}

public static void main(String[] args){
    DigitSum ds= new DigitSum();
        System.out.println(ds.compute(435));
    }
}
于 2012-12-21T07:42:20.063 に答える
-1

いくつか前に tymz を作成したこの単純な Java コードを使用します。これは、正の数と負の数を追加するためのものです。

class SumDigit
{
public static void main(String args[])
{
int sum, i,a,d;
a = Integer.parseInt(args[0]);
sum = 0;
for(i=1;i< =10;i++)
{
d = a%10;
a = a/10;
sum=sum + d;
} 
System.out.println("Sum of Digit :"+sum);
}
}
于 2012-12-21T07:11:08.007 に答える