Description
输入一个数(各个数位不全相同,且数字的长度为4),将它的各位从大到小排得的数maxnum和各位从小到大排的数minnum相减,反复循环直至值为0或者6147。且如果开头有0那么0不参与排序
Input
多组输入,每组一个数,以-1结束输入
Output
对于每组用例,若满足题目所给条件则按样例输出,否则输出No!!
Solution
注意:若不是四位数,直接输出No!!
Code
#include <iostream>
#include <string>
using namespace std;
bool same(string s)//判断s是否由同一元素组成
{
bool f=true;
for (int i=1;i<s.length();i++)
if(s[i]!=s[0])
f=false;
return f;
}
int trans(string s)//将s转化为整型
{
int t=0;
for(int i=0;i<s.length();i++)
t=t*10+s[i]-'0';
return t;
}
string sort1(string s)//将s降序排得到s对应四位数最大值
{
for(int i=0;i<s.length()-1;i++)
for(int j=i+1;j<s.length();j++)
if(s[i]<s[j])
swap(s[i],s[j]);
return s;
}
string sort2(string s)//将s升序排得到s对应四位数最小值
{
for(int i=0;i<s.length()-1;i++)
for(int j=i+1;j<s.length();j++)
if(s[i]>s[j])
swap(s[i],s[j]);
return s;
}
string tostring(int t)//将t转化为string型
{
string s="",s1="";
if(t==0)
return "0";
while(t)
{
int r=t%10;
s+=(char)(r+48);
t/=10;
}
for(int i=s.length()-1;i>=0;i--)
s1+=s[i];
return s1;
}
int main()
{
string s;
while (cin>>s&&s!="-1")
{
cout<<"N="<<s<<":"<<endl;//按格式输出
if(same(s)||s.length()!=4)//不是四位数直接输出No!!
cout<<"No!!"<<endl;
else
{
int t=0;
while(1)//循环操作
{
if(s=="0"|| s=="6174")//满足条件,退出循环
break;
t++;//操作数加一
int a=trans(sort1(s));//得到maxnum
int b=trans(sort2(s));//得到minnum
cout<<a<<"-"<<b<<"="<<a-b<<endl;//按格式输出
s=tostring(a-b);//更新值
}
cout<<"Ok!! "<<t<<" times"<<endl;//按格式输出
}
}
return 0;
}