日々精進

aikoと旅行とプログラミング

【AOJ 2424】Kakezan

問題

Kakezan | Aizu Online Judge

ソースコード

#include <iostream>
#include <string>

#define rep(i,n) for(int i = 0 ; i < n ; i++)
#define REP(i,a,n) for(int i = a; i < n ; i++)

using namespace std;

int calc(string s){
  int max_v = -1000000;
  int len = s.length();
  REP(i,1,len){
    string s1 = s.substr(0,i);
    string s2 = s.substr(i);
    int mul = stoi(s1)*stoi(s2);
    max_v = max(max_v, mul);
  }

  if(max_v == stoi(s)) return -1;
  return max_v;
}

int solve(void){ 
  string s;
  cin >> s;
  
  if(stoi(s) < 10) return 0;
  
  int cnt=0;
  while(true){
    cnt++;
    int res = calc(s);
    if(res < 10) break;
    s = to_string(res);
  }
  
  return cnt;
}

int main(){
  int n;
  cin >> n;
  rep(i,n){
    cout << solve() << endl;
  }

}

std::to_string()とstd::stoi()はC++11じゃないと使えないので注意。