하사드 수

NJW·2021년 8월 16일
0

코테

목록 보기
45/170

들어가는 말

x를 x의 자릿수의 합으로 나눴을 때, 나누어 떨어지는 경우가 하사드의 수이다.
기본 아이디어는 x%10으로 자릿수를 나눈 다음에 전부 더해줘서 그걸 x로 나눠주면 된다.
여기서 나눠줬을 때의 값과 x의 값을 분리해야 한다는 중요 점이 있다.
그러니까,

    while(xx > 0){
        sum = sum + (xx%10);
        xx = xx / 10;
    }

여기에서 xx에다가 x의 값을 옮겨줘야 한다는 것이다. 만일 x를 그대로 쓸 경우 나머지가 0인지 아닌지 분간하는 연산에서 나머지가 무조건 0이 되는 경우가 발생할 수 있다(...).

코드 설명

제일 먼저 작성한 코드는 벡터를 이용했다. 사실, 벡터 없이 쉽게 풀 수 있는 문제인데 앞에 푼 문제들이 대부분 벡터를 사용해서 나도 모르게 벡터를 썼다(무의식의 힘이란...).
두 번째 작성한 코드는 벡터 없이 바로 while문 안에서 더하기를 해주었다. 코린이인 내가 봐도 두 번째 코드가 더 좋은 코드로 보인다.

코드

1

#include <string>
#include <vector>
#include <iostream>

using namespace std;

bool solution(int x) {

    vector<int>v;
    bool answer = true;
    int xx = x;
    int sum = 0;
    int mod = 0;

    //벡터에다가 나머지 값을 넣어준다.
    while(xx > 0){
        v.push_back(xx%10);
        xx = xx / 10;
    }


    //나머지 값 전부 더하기
    for(int i = 0; i < v.size(); i++){
        sum = sum + v[i];
    }

    //만일 x와 합 값으로 나눈 값이 0이 아니면, false
    if(x%sum != 0){
        answer = false;
    }

    return answer;
}

2

#include <string>
#include <vector>
#include <iostream>

using namespace std;

bool solution(int x) {
    
    int xx = x;
    int sum =0;
    
    while(xx > 0){
        sum = sum + (xx%10);
        xx = xx / 10;
    }
    
    return (x % sum == 0) ? true : false;
 
}
profile
https://jiwonna52.tistory.com/

0개의 댓글