题目描述
对于一个数大于等于0的数X,我们定义三个函数,g1(x),g2(x),f(x)
g1(x) = 让x的所有数字从大到小排列(比如123变成321)
g2(x) = 让x的所有数字从小到大排列(比如321变成123)
f(x) = g1(x) - g2(x)
我们给定两个数N和K,让你算出N,f(N)经过K次运算后是多少?
输入
第一行输入两个数N(1<=N<=1e9),K(1<=k<=1e5)
输出
一个数f(N)
样例输入 复制
314 2
样例输出 复制
693
代码如下:
#include<stdio.h>
long long g1(long long m)//求
{
long long i=0,j,t,a[20],n;
long long s=0,k=m;
while(k)
{
a[i++]=k%10;
k/=10;
}
n=i;
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
{
if(a[j]>a[j-1])
{
t=a[j];a[j]=a[j-1];a[j-1]=t;
}
}
}
for(i=0;i<n;i++)
{
s=s*10+a[i];
}
return s;
}
long long fs(long long n)
{
long long a=n,s=0;
while(a)
{
s=s*10+a%10;
a/=10;
}
return s;
}
int main()
{
long long n,k,i;
long long a,b,s;
scanf("%lld%lld",&n,&k);
s=n;
while(k--)
{
a=g1(s);
b=fs(a);
s=a-b;
}
printf("%lld\n",s);
}