简单的字符串处理,先将输入的数前面补0,直到为4位数。
然后进行字符串相减,直到为6174为止。如果字符串每个字符都相等,则输出0000。
AC代码:
#include<iostream>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<list>
#include<set>
#include<stack>
#include<cmath>
#include<vector>
#define inf -100000000
using namespace std;
bool cmp(char x,char y)
{
return x>y;
}
char ans[5]="6174";
int f(char* s)
{
int flag=0;
for(int i=0;i<3;i++)
{
if(s[i]!=s[i+1])
{
flag=1;
break;
}
}
return flag;
}
int main()
{
char s[5];
scanf("%s",s);
char tmp[5];
strcpy(tmp,s);
int len=strlen(s);
for(int i=0;i<4-len;i++)
{
s[i]='0';
}
for(int i=4-len;i<4;i++)
{
s[i]=tmp[i+len-4];
}
s[4]='\0';
if(f(s)==0)
{
printf("%s - %s = 0000",s,s);
}
else
{
char s1[5];
char s2[5];
sort(s,s+4,cmp);
strcpy(s1,s);
sort(s,s+4);
strcpy(s2,s);
char s3[5];
s3[4]='\0';
int jinwei=0;
for(int i=3;i>=0;i--)
{
int sum=s1[i]-s2[i]-jinwei;
if(sum<0)
{
s3[i]=sum+10+'0';
jinwei=1;
}
else
{
s3[i]=sum+'0';
jinwei=0;
}
}
//cout<<s3<<endl;
printf("%s - %s = %s\n",s1,s2,s3);
while(strcmp(s3,ans)!=0&&f(s3)==1)
{
sort(s3,s3+4,cmp);
strcpy(s1,s3);
sort(s3,s3+4);
strcpy(s2,s3);
s3[4]='\0';
int jinwei=0;
for(int i=3;i>=0;i--)
{
int sum=s1[i]-s2[i]-jinwei;
if(sum<0)
{
s3[i]=sum+10+'0';
jinwei=1;
}
else
{
s3[i]=sum+'0';
jinwei=0;
}
}
printf("%s - %s = %s\n",s1,s2,s3);
}
}
}