Computer Science/Algorithm

[Algorithm/C] BOJ.14954 Happy Number

재오니소스 2018. 1. 1. 18:41


접근 방법

1. 가장 큰 입력의 수의 배열을 만든 후 자리수를 쪼갠다.

2. 매우 비효율적인 방법으로 보임....ㅠㅠ

3. C언어로 더 좋은방법 있으면 댓글 부탁드립니다.


/*

Problem : Happy Number

Writer : J. I. Mun

Date : 20180101

*/

#include <stdio.h>


int buf[10] = { 0 };


int f(int n) {

int sum = 0;


for (int i = 0; i<=10 ; i++) {

if (n / 10 != 0) {

buf[i] = n % 10;

}

else {

buf[i] = n;

}

n /= 10;

}

/*

for (int i = 0; i < sizeof(buf)/sizeof(buf[0]); i++) {

printf("%d ", buf[i]);

}

*/

for (int i = 0; i<= 10; i++) {

sum += buf[i] * buf[i];

}

// printf("sum : %d\n", sum);


if (sum == 4) {

return -1;

}

else if (sum == 1) {

return 1;

}

else

return f(sum);

}


int main(int argc, char * argv[]) {

int n;

int t = 0;


scanf_s("%d", &n);

t = f(n);


if (t == 1) {

printf("HAPPY\n");

}

if (t == -1) {

printf("UNHAPPY\n");

}


return 0;

}


출처