AtCoder Beginner Contest 192 C - Kaprekar Number Editorial
#include<iostream> #include<string> #include<algorithm> using namespace std; int main() { long long n,k,i,f1,f2; cin>>n>>k; long long a[k+1]={0}; a[0]=n; for(i=1;i<=k;i++) { if(!a[i-1]) break; else { long long sa=a[i-1],num=0; for(;sa!=0;) sa/=10,num++; long long s[num]; for(long long j=0;j<num;j++) { s[j]=a[i-1]%10; a[i-1]/=10; } sort(s,s+num); f1=0,f2=0; for(long long p=0;p<10;p++) { f1=f1*10+s[p]; } for(long long p=9;p>=0;p--) { f2=f2*10+s[p]; } a[i]=f2-f1; } } if(i!=(k+1)) cout<<0<<endl; else cout<<a[k]<<endl; }
#include<stdio.h> int f(int n){ int c[20]={}; while(n){ c[n%10]++;//类似哈希 n/=10; } int g1=0,g2=0; for(int i=9;i>=0;i--)for(int j=0;j<c[i];j++)g1=g1*10+i; for(int i=0;i<=9;i++)for(int j=0;j<c[i];j++)g2=g2*10+i; return g1-g2; } int main(){ int n,k; scanf("%d%d",&n,&k); for(int i=0;i<k;i++)n=f(n); printf("%d\n",n); }