6378번 - 디지털 루트
정답률에 비해서 생각보다 쉬운 문제였다.
문제의 핵심은 1000자리의 숫자는 정수형 변수로 표현할 수 없기 때문에 문자열로 표현한다는 점인 것 같다.
따라서 string 객체로 해당하는 문자를 받아들이고, 그 문자를 한 문자씩 읽어들이면서 값을 계산하는 과정을 반복하면 된다.
getNum 함수에서 for문을 돌면서 각 자리의 수를 더해서 ret 라는 정수 배열에 넣어준다.
그리고 ret 라는 값이 10 이상이면 다시 ret 값을 string 으로 바꾸고 재귀함수를 구현한다.
만약 ret 값이 원하는 한자리 수 값이 되면 리턴하면서 출력한다.
###
to_string : <string> 헤더 파일에 있는 int 형 변수를 string으로 변환시켜주는 함수
<정답 코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include<iostream> #include<string> using namespace std; int getNum(string& s) { int ret = 0; for (int i = 0; i < s.size(); i++) { ret += s[i] - '0'; } if (ret >= 10) { s = to_string(ret); ret = getNum(s); } return ret; } int main() { while (true) { string s; cin >> s; if (s == "0") break; cout << getNum(s) << endl; } return 0; } | cs |
반응형