Problem
Problem URL : 반복 수열
[1] Answer Code (17. 08. 29)
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int arr[300005];
int cnt;
int main(){
int a,p;
cin >> a >> p ;
while (1) {
if( arr[a] == 2 ) break;
arr[a]++;
int number = 0;
int a_number = a ;
// 방법 1. 로그함수를이용한자리수계산
number = (int)log10((double)a)+1;
/*
// 방법 2. 직접계산
while (a_number != 0)
{
a_number /= 10;
number++;
}
*/
a_number = a;
int value;
int tmp = 0;
for(int i=number-1; i>=0; i--){
value = a_number / pow(10, i);
tmp += pow(value,p);
a_number = a_number - ( value * pow( 10 , i ) ) ;
}
a = tmp ;
}
for(int i=1; i<300005; i++){
if ( arr[i] == 1) cnt ++;
}
printf("%d\n",cnt);
return 1;
}
Review
- 총 몇자리 인지 구하는 로직을 Key Point에 정리해 놨다.