Java/모두의 자바

Chapter 10-63 하샤드 수

계란💕 2022. 2. 13. 16:57

  Ex) 양의 정수 x가 하샤드 수라면 x의 자릿수 합으로 x가 나눠줘야 한다. 예를 들어 18의 자릿수의 합은1 + 8 =9이고 18은 9로 나눠 떨어지므로 하샤드 수이다. Harshad함수는 양의 정수 n을 매개 변수로 받는다. 입력받은 n이 하샤드 수인지 아닌지 판단하는 함수를 완성하라. 

<hide/>
package javaStudy;
public class HarshadNumber {
	public boolean isHarshad(int num) {
		int su = num;
		int sum = 0;
		boolean isHarshad = false;
		while( su > 0) {
			sum += su % 10;
			su = su / 10;
		}
		if(num % sum == 0) 
			isHarshad = true;
		return isHarshad;
	}
	public static void main(String[] args) {
		HarshadNumber sn = new HarshadNumber();
		System.out.println(sn.isHarshad(50));
		System.out.println(sn.isHarshad(14));
		System.out.println(sn.isHarshad(11));
		System.out.println(sn.isHarshad(12));			
	}
}

  Note) 실행 결과

  - 14라는 값이 들어왔을 때, 1과 4라는 값을 얻어와야한다. 

  - su 값이 14라면 su % 10의 결과는 4이다. 

  - sum = 4 , su = 1이 된다. 

  - 다시 반복하면 su % 10 = 1이 되고 sum = 4 + 1이 된다. 

  - su / 10 = 1 / 10은 0 이므로 반복문이 종료된다. 

  - 자릿수의 합 구하는 게 끝나면 자릿수의 합으로 나눠 떨어지는지 확인하면 된다. 

  - if(num % sum == 0)  isHarshad = true;

    -> 코드를 실행해서 나눠떨어지면 하샤드 수이므로 isHarshad= true를 수행하면 된다. 

  - 자릿수의  합을 구할 때 다른 방법으로 구할 수도 있다. 

  - Java가 제공하는 Integer클래스의 toString메서드를 이요해서 int 값을 String 값으로 바꿔줄 수 있다. 

   - chatAt()메서드는 index에 해당하는 문자 하나만 얻어낼 수 있다. 

<hide/>
package javaStudy;
public class HarshadNumber {

	public boolean isHarshad(int num) {
		String str = Integer.toString(num);
		int sum = 0;
		boolean isHarshad = false;
		for(int i = 0; i < str.length();++i) {
			sum += Integer.parseInt(str.charAt(i) + "");
		}
		if(num % sum == 0) 
			isHarshad = true;
		return isHarshad;
}
	public static void main(String[] args) {
		HarshadNumber sn = new HarshadNumber();
		System.out.println(sn.isHarshad(50));
		System.out.println(sn.isHarshad(14));
		System.out.println(sn.isHarshad(11));
		System.out.println(sn.isHarshad(12));			
	}
}