My coding way (8)

问题 F: 6147问题

时间限制1Sec  内存限制128 MB

题目描述

输入一个n位数,把所有数字从大到小排序得到a,从小到大得到b,然后用a-b替换原来这个数
并且继续操作。1234 4321-1234=30878730-378=83528532-2358=6174 

输入

一个四位数

输出

参考样例

样例输入

1234

样例输出

1234->3087->8352->6174

 

^_^ 其实也没什么的啦w~ 不过总感觉自己写的太复杂了:::>_<:::

#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int strlenx(const char* inc)
{
    int i=0;
    while(inc[i]!='\0')
    {
        i++;
    }
    return i;
}
char str[16];
char tmpstr[16];
inline void swapchar(char* a,char* b)
{
    char tmp=*b;
    *b=*a;
    *a=tmp;
}
int main()
{
    scanf("%s",str);
    printf("%s",str);
    while(strcmp(str,"6174")!=0)
    {
        strcpy(tmpstr,str);
        int i,j,len;
        for(i=0,len=strlenx(str);i<len;i++)
        {
            for(j=0;j<len-1;j++)
            {
                if(str[j]<str[j+1])
                {
                    swapchar(&str[j],&str[j+1]);
                }
            }
        }
        for(i=0,len=strlenx(tmpstr);i<len;i++)
        {
            for(j=0;j<len-1;j++)
            {
                if(tmpstr[j]>tmpstr[j+1])
                {
                    swapchar(&tmpstr[j],&tmpstr[j+1]);
                }
            }
        }
        int a,b;
        sscanf(str,"%d",&a);
        sscanf(tmpstr,"%d",&b);
        a=a-b;
        printf("->%d",a);
        memset(str,0,16);
        sprintf(str,"%d",a);
    }
    printf("\n");
    return 0;
}


你可能感兴趣的:(My coding way (8))