문제 URL:
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
다음 문제는 더하기 사이클을 반복하다가 원래 숫자로 돌아올 때
몇 번의 사이클을 반복하는지 사이클 횟수를 구하는 문제이다.
더하기 사이클은 다음과 같이 반복되는데,
0보다 크거나 같고 99보다 작거나 같은 정수가 주어질 때,
주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다.
그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면
새로운 수를 만들 수 있다.
이 문제는 10의 자리와 1의 자리를 더해야하므로
'/'와 '%' 기호를 이용하여 십의 자리 수와 일의 자리 수를 구한 뒤, 각각을 변수에 할당했다.
더하기 사이클은 do while문으로 작성했는데,
이는 처음에 조건과 상관없이 사이클을 한 번 진행시켜 n의 값과 norm의 값을 다르게 설정하기 위함이다.
주의할 점은 십의 자리와 일의 자리를 더한 값이 10을 넘으면 가장 오른쪽 자리 수만 필요하기 때문에
if문을 사용하여 조건을 덧붙여주어야 했다.
또한, 문제의 출력값은 사이클의 횟수이므로 반복문에 size 변수를 넣어 사이클의 횟수를 세어주었다.
#include<iostream>
using namespace std;
int main()
{
int n,size=0;
cin >> n;
int norm = n;
do
{
int n_10 = n/10;
int n_1 = n%10;
int temp = n_10+n_1;
if (temp>9)
temp = temp%10;
n = n_1*10+temp;
size++;
} while(norm!=n);
cout << size;
return 0;
}