나르시스수
숫자를 자리 단위별로 나눠서 자리수에 3제곱하여 합한 값이 자신의 숫자와 같은 수를 나르시스 수라 합니다.
ex) 153 = 1^3 + 5^3+ 3^3
코드 작성 기준
- 입력 받는 값은 정수형으로 계산(문자열 처리도 가능하지만 정수형을 계산함)
- 정수를 입력 받으면 정수의 자리수를 계산한 후 자릿수를 기준으로 숫자를 단위별로 누눠서 3제곱한 값을 계산
- 이렇게 얻은 값과 입력값이 일치하는지 검사
소스
public class NarcisusAgolithm {
/*
* 정수를 입력 받는 메소드 정의
*/
public int input()throws IOException{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
int input;
do{
System.out.print("Narssisus수를 구할 범위 입력 : ");
input=Integer.parseInt(in.readLine());
if(input<0){ System.out.println("양의정수로 다시 입력하세요!"); }
}while(input<0);
return input;
}
/*
* 자릿수를 탐색하는 메소드 정의
*/
public int searchFigure(int in){
int count=0;
while(in>0){
in/=10;
count++;
}
return count;
}
/*
* 나르시스수인가 탐색하는 메소드 정의
*/
public void searchNar(int in, int count){
int s_nar=in;
int sum=0;
int figure;
for(int i=count; i>0; i--){
if(i==1){
figure=in;
}else{
figure=(int)(in/(int)Math.pow(10,i-1));
}
sum+=figure*figure*figure;
in-=figure*(int)Math.pow(10,i-1);
}
if(sum==s_nar){ System.out.println("나르시스값 : "+s_nar);}
}
/*
* 메인 메소드
*/
public static void main(String[] args) throws IOException{
NarssisusAgolithm n=new NarssisusAgolithm();
int in=n.input();
for(int i=1; i<=in; i++){
int count=n.searchFigure(i);
n.searchNar(i, count);
}
}
}
출력 결과
후기) 문자열로 계산하는 방법은 자바 특성상 쉽습니다. 그래서 정수형 계산법을 이용하였습니다.
'정보 처리 > 알고리즘' 카테고리의 다른 글
버블정렬(Bubble Sort) - 교환정렬 (0) | 2011.01.26 |
---|---|
달팽이 알고리즘 (0) | 2011.01.26 |
정렬 알고리즘 (0) | 2011.01.26 |
N_Queen (Back Tracking 알고리즘) (0) | 2011.01.26 |
소수구하기 (0) | 2011.01.26 |