2020 排序相减
题目来源: syu练习题
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注
“排序相减”操作是指对于任意一个四位数n,将四个数字分别进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值n1,然后继续将n1中的四个数字进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值n2,以此类推,最后总会得到一个数字黑洞,无法跳出。
例如:样例2中4176 = 6532 - 2356
Input
第一行输入一个整数T,表示数据组数(1
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
char num[4];
void getstr(int n)
{
for (int i=0;i<4;i++)
{
num[i]=n%10;
n/=10;
}
}
int getnum(char n[])
{
int sum1=0,sum2=0;
for (int i=0;i<4;i++)
{
sum1=sum1*10+n[i]-'0';
sum2=sum2*10+n[3-i]-'0';
}
return fabs(sum1-sum2);
}
int main()
{
int n,k,temp;
cin>>n;
while(n--)
{
cin>>num>>k;
if(k==0)
{
cout<<num<<endl;
continue;
}
while(k--)
{
sort(num,num+4);
temp=getnum(num);
getstr(temp);
}
cout<<temp<<endl;
}
return 0;
}