2014-11-19 1 views
1

그래서이 연습을하고 있습니다. 선생님은이 줄에서 num/10을 원한다고 말합니다. 메서드에서 System.out.print(numDigits(num/10)); (원래 숫자가 0 0이 아닌 1 자리수를 반환합니다.) 그러나 나는 그가 어디에서 원하는지 전혀 모른다.숫자 자릿수를 반환하는 재귀 메서드, 0에 대한 도움말

이 방법은 간단 나에게

(* 숫자의 자릿수를 계산하는 재귀와 함께 할 수 있어야합니다),하지만 당신은 당신이 원하지 않는 많은 코드를 작성하는 경우 같아요 계속해서 x/10을 입력하십시오.

import java.util.*; 

public class NumDigits 
{ 
    public static void main(String[]args) 
    { 
    int num; 

    Scanner input = new Scanner(System.in); 
    num = input.nextInt(); 
    input.close(); 

    System.out.print(numDigits(num/10)); 
    } 

    public static int numDigits(int x) 
    { 
    if (x == 0) 
    {return 1;} 
    else 
    { 
     return 1 + numDigits(x/10); 
    } 
    } 
} 

나는이 작업을 수행 할 수도 있겠죠,하지만 ... 더 많은 코드를 취/

import java.util.*; 

public class NumDigits 
{ 
    public static void main(String[]args) 
    { 
    int num; 

    Scanner input = new Scanner(System.in); 
    num = input.nextInt(); 
    input.close(); 

    System.out.print(numDigits(num, num)); 
    } 

    public static int numDigits(int x, int num) 
    { 
    if (num == 0) 
    {return 1;} 
    else if (x == 0) 
    {return 0;} 
    else 
    { 
     return 1 + numDigits(x/10, num); 
    } 
    } 
} 
+3

당신이 명확히 수 뭘 묻고있는거야? – jrad

+0

단위 테스트를위한 훌륭한 코드는 0, 1, 15, 20, 100 등의 테스트를 통해 좋은 알고리즘을 설계하는 데 도움이 될 수 있습니다. 힌트'Math.log'는 영리한 방법을 제공 할 수도 있습니다.) –

+0

나는 선생에게 그 방법에 더 많은 코드를 넣는 대신에 num/10을 사용하는 것이 더 간단하므로 (0은 0 자리가되지 않음), 그는 "당신이 바로 거기에있어, 메인 메서드에서 num/10을 가지지 않고 재귀 적 메서드 인" – user3146998

답변

1

글쎄, 그 첫 번째 부문은 오히려 쉽게 제거된다.

public class NumDigits 
{ 
    public static void main(String[]args) 
    { 
    int num; 

    Scanner input = new Scanner(System.in); 
    num = input.nextInt(); 
    input.close(); 

    System.out.print(numDigits(num)); 
    } 

그리고 이제 0 수표는 여전히 numDigits 기능 작동, 더욱 그것은뿐만 아니라 첫 번째 '0'에 대한 않습니다. 지금 조정할 필요가있는 것은 재귀 호출 자체뿐입니다. 숙제이므로 운동으로 남습니다. 로케일/기수/속도/네거티브에 대한

public static int numDigits(int x) { 
    return Integer.toString(x).length(); 
} 

걱정 :

+0

아는 바로 그 질문입니다. numDigits 메서드로 무엇을 해야할지 모르겠습니다. – user3146998

+0

기본 대답으로 시작하십시오. 음수가 허용되는 경우 숫자의 절대 값을 가져옵니다. 그런 다음 10보다 작 으면 답을 올바르게 알 수 있습니까? 10보다 큰 경우, 예를 들어. 123,'/ 10' 트릭을 할 수 있습니다. – Nanne

1

나는 numDigits 숫자 여기

간단한 솔루션입니다에 진수의 수를 반환한다고 가정입니까? 재귀가 필요한 경우, 그러나

public static int numDigits(int x) { 
    if (x == 0) { 
     return 1; 
    } else { 
     return (int) (Math.log10(Math.abs(x))) + 1; 
    } 
} 

:이 하나를 시도

public static int numDigits(int x) { 
    if (x > -10 && x < 10) { 
     return 1; 
    } else { 
     return numDigits(x/10) + 1; 
    } 
} 
+0

오, 세상에 당신 대답이 .. 위대하다는 것을 인정해야합니다. 그래서 간단하고 우아합니다. –

0

왜 당신은 그냥 이렇게하지 :

import java.util.*; 

public class NumDigits 
{ 
public static void main(String[]args) 
{ 
int num; 

Scanner input = new Scanner(System.in); 
num = input.nextInt(); 
input.close(); 

System.out.print(numDigits(num)); 
} 

public static int numDigits(int num) 
{ 
if ((num/10) == 0) 
{return 1;} 
else 
{ 
    return 1 + numDigits(num/10); 
} 
} 
} 

이 방법은 "NUM/10"입니다 재귀 적 방법에서는 main method가 아니고 제로 (zero) 문제는 해결된다.

0

음 나는 바보입니다. 대답은 :

import java.util.*; 

public class NumDigits 
{ 
    public static void main(String[]args) 
    { 
    long num; 

    Scanner input = new Scanner(System.in); 
    num = input.nextInt(); 
    input.close(); 

    System.out.print(numDigits(num)); 
    } 

    public static long numDigits(long x) 
    { 
    if (x/10 == 0) 
    {return 1;} 
    else 
    { 
     return 1 + numDigits(x/10); 
    } 
    } 
} 
내가 그렇게 작동하지 않을 것으로 가정

나는이 방법에 의해 SuperDigit을 달성 할 수있는 재귀 방법을 사용하여

1

를 시도하지 않았다

public class SuperDigit 
{ 
//static int sum = 0; 

public static void main(String[] args) 
{ 
int n = 8596854; 



System.out.println(sum(n)); 
} 
static int sum (int num) 
{ 
if (num != 0) 
{ 
    return (num % 10 + sum (num/10)); 
} 
else 
{ 
    return 0; 
} 
} 
}