2015-11-13 7 views
0
int sumOfDigits(int n) 
    { 

    if(n<=9) 

    return n; 

    else 


     { 
       int r=0; 
       while(n!=0) 
        { 
         r=r+n%10; 
         n=n/10; 
        } 


    sumOfDigits(r); 
       } 

      } 

Эта функция находит сумму цифр числа, пока она не станет меньше, чем 10. egif п = 12345 затем выводится = 6 , как 1 + 2 + 3 + 4 + 5 = 15, снова 1+ 5 = 6.Что такое временная сложность функции ниже?

+0

вы можете протестировать его, запуская среду выполнения для разных значений 'n'. – jogo

ответ

1

Я предполагаю, что вы пытаетесь достичь, это что-то вроде этого:

class St2 { 
    static int sumOfDigits(int n) { 
     if(n<=9) { 
      return n; 
     } 
     else { 
      int d = n%10; 
      return d + sumOfDigits((n-d)/10); 
     } 
    } 

    public static void main(String[] args) { 
     System.out.println(St2.sumOfDigits(345678)); 
    } 
} 

Это просуммировать цифры. Сложность линейна в количестве цифр, таким образом логарифмическом в масштабе входного числа.

+0

Вывод вашего кода равен 33, но он должен быть 6. Как я должен найти сумму цифр до тех пор, пока она не станет меньше 10. – Darth

+0

Это не будет _sum_ цифр, но _number_ цифр, извините, я неправильно понял ваш английский. .. – vacsora

+0

С уважением к недоразумениям о выходе, сложность была заявлена ​​правильно как O (logn) – rpd