[Java] 세 자리 숫자 중에서 각 자리를 세제곱 후 더해서 자신이 되는 수를 찾는 프로그램 작성하기

Haeun Noh·2022년 7월 20일
0

JAVA_예제

목록 보기
13/23
post-thumbnail

0720


세 자리 숫자 (100~999까지의 수) 중에서 각 자리를 세제곱 후 더해서 자신이 되는 수를 찾는 프로그램을 작성하시오.

ex)
371 -> 3의 세제곱 + 7의 세제곱 + 1의 세제곱 = 371

실행결과 : 
1 narcissus: xxx
2 narcissus: xxx

소스

public class For_Test11 {
	public static void main(String args[]) {
		
		int cnt = 1;	
        // 실행 결과에서 narcissus 앞에 붙는 숫자, 즉 이 프로그램에서 찾는 수의 개수
		for ( int i = 100; i <= 999; i++ ) {
			int hund = ( i / 100 );	// 100의 자리 구하기
			int ten = i - (hund*100);
			ten = ( ten / 10 );		// 10의 자리 구하기
			int one = i - ( ( hund*100 )+( ten*10 ) );		// 1의 자리 구하기

			int cubic_hund = hund*hund*hund;
			int cubic_ten = ten*ten*ten;
			int cubic_one = one*one*one;

			if ( ( cubic_hund+cubic_ten+cubic_one ) == i ) {
				System.out.println( cnt+" narcissus: "+i );
				cnt++;
			}
		}
	}
}

소스 풀이

  1. cnt는 이 프로그램에서 찾는 수의 개수를 나타냅니다. 즉, 각 자리를 세 제곱한 뒤 더한 값이 자신이 되는 수의 개수를 나타냅니다.
  2. i100~999 사이의 수를 나타냅니다. for문을 한 번 반복할 때마다 1씩 증가합니다.
  3. hund(hundred)100의 자리를 나타냅니다. 100의 자리를 구하는 방법은 i에서 100을 나눈 입니다.
  4. ten10의 자리를 나타냅니다. 10의 자리를 구하는 방법은 i에서 hund(100의 자리)100을 곱한 값을 빼고, 그 값에서 10을 나눈 입니다.
  5. one1의 자리를 나타냅니다. 1의 자리를 구하는 방법은 i(세 자리 수에서 (hund(100의 자리)*100) + (ten(10의 자리)*10)를 뺍니다.
    ex) 371
    371 / 100 = 3
    100의 자리 : 3
    3 * 100 = 300
    371 - 300 = 71
    71 / 10 = 7
    10의 자리 = 7
    7 * 10 = 70
    371 - (300+70) = 1
    1의 자리 = 1
  6. cubic_hundhund의 세 제곱을 나타내는 변수입니다. cubic_hundhund*hund*hund의 값을 저장합니다.
  7. cubic_tneten의 세 제곱을 나타내는 변수입니다. cubic_tenten*ten*ten의 값을 저장합니다.
  8. cubic_oneone의 세 제곱을 나타내는 변수입니다. cubic_oneone*one*one의 값을 저장합니다.
    ※ cubic은 무슨 뜻인가요?
    	- 세 제곱이라는 뜻입니다.
     ※ 왜 cubic_hund와 같은 변수를 따로 쓰나요? 그냥 hund*hund*hund로 나타내면 안 될까요?
    	- 세 제곱으로 나타내야 하는 횟수가 세 번인데다가 그 변수의 갯수도 세 개이기 때문에
       	  쓸데없이 소스가 길어짐을 방지하고자 따로 변수를 두었습니다.
  9. 만약 각 자리의 세 제곱의 합이 i(기존의 수)와 같다면 cnt+"narcissus: "+i의 형식으로 출력해 1 narcissus: xxx의 형태가 나오도록 합니다. 그리고 cnt++을 해주어 앞의 숫자가 바뀔 수 있도록 합니다.

실행 결과

1 narcissus: 153
2 narcissus: 370
3 narcissus: 371
4 narcissus: 407


profile
기록의 힘을 믿는 개발자, 노하은입니다!

0개의 댓글