话不多说,上代码
#include <stdio.h>
#include <string.h>
//阴啊这个题目 虽然告诉四位数但是范围是大于0的 而且最后的三个数字都要求是以四位数字输出 %04d 难度倒是不大 细节要注意
int max (int n)
{
int i,h[10]={0};
int sum=0;
int j;
for (j=0;j<4;j++)
{
i = n%10;
h[i]++;
n/=10;
}
for (i=9;i>=0;i--)
{
if (h[i]!=0)
{
sum*=10 ;
sum += i;
h[i]--;
i++;
}
}
return sum;
}
int min (int n)
{
int i,h[10]={0};
int sum=0;
int j;
for (j=0;j<4;j++)
{
i = n%10;
h[i]++;
n/=10;
}
for (i=0;i<=9;i++)
{
if (h[i]!=0)
{
sum*=10 ;
sum += i;
h[i]--;
i--;
}
}
return sum;
}
int main ()
{
int n,t;
scanf ("%d",&n);
// printf ("%d %d",max(n),min(n));
while (1)
{
t=max(n) - min(n);
printf ("%04d - %04d = %04d\n",max(n), min(n),t);
n=t;
if (n==6174 || n==0) break;
}
return 0;
}
其中 测试点 2,3,4是因为没有考虑到二位数,三位数的情况,比如 1 或者11,如果不考虑的话会陷入死循环。测试点1,3是因为输出=后面的那个数字没有以四位数字输出即0099这样的,其他的测试点就是前面两个数字也要保证四位输出。
|