문제

자연수 N의 자릿수의 합을 구하는 문제이다.

 

풀이 방법

1. N을 string 형태로 변환

2. N의 길이만큼 N[i]를 정수로 변환해서 더함

* 형변환이 가장 중요한 요인

 

문제 풀이

#include <iostream>
#include <string>
#include <typeinfo>

using namespace std;
int solution(int n)
{
    int answer = 0;
    string str_n = to_string(n);
    
    for (int i = 0; i < str_n.size(); i++)
    {
        answer += str_n[i] - '0';
    }

    return answer;
}

 

char에서 int로 형변환 하는 과정에서 (int) 등의 여러 형변환을 사용해봤는데, N[i]의 ascii 코드로 변환이 되는 문제를 겪었다.

char에서 '0'을 빼주면 int 형이 된다.

원리는 ascii 코드에서는 숫자 문자들이 연속된 코드 값을 가지고 있다.

'0'은 48, '1'은 49 ~ '9'는 57의 형태로 할당되어 있다.

그래서 char '2'를 int 2로 출력하고 싶다면 '2' - '0' 즉, 50 - 48 = 2 이런 형태로 형변환이 가능한 것이다.

 

처음에는 toInt, (int), stoi 등 여러가지를 다 써봤지만 다들 ascii 코드값을 가지고 있어 많이 혼란스러웠다.

이렇게 또 하나 알아간다 ㅎㅎ