問題
繰り返す10進数 | Aizu Online Judge
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
#define rep(i,n) for(int i = 0 ; i < n ; i++)
string zero(string s, int l){
while(s.length() < l){
s = "0" + s;
}
return s;
}
int flag[1000001];
int main(){
string in;
int l;
while(true){
cin >> in >> l;
if(l==0) break;
in = zero(in,l);
fill(flag, flag+1000001, -1);
flag[stoi(in)] = 0;
for(int i = 1 ; i <= 20 ; i++){
sort(in.begin(), in.end());
string max = string(in.rbegin(), in.rend());
string min = string(in.begin(), in.end());
string ans = to_string(stoi(max) - stoi(min));
ans = zero(ans,l);
if(flag[stoi(ans)]>-1){
cout << flag[stoi(ans)] << " " << stoi(ans) << " " << i-flag[stoi(ans)] << '\n';
break;
}
flag[stoi(ans)] = i;
in = ans;
}
}
}