C语言 重排一个整数x

我知道我错了,可以怎么改啊

img

img


#include <stdio.h>
int main()
{
int d, i, j, temp, num[10], n, c, a;
scanf("%d", &d);
a = d;
c = 0;
for (n = 0; d; n++)
{
num[n] = d % 10;
d /= 10;
}
for (i = 0; i < n - 1; i++)
for (j = 0; j < n - i - 1; j++)
if (num[j] > num[j + 1])
{
temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
for (i = 0; i < n; i++)
{

        c = c * 10;
        c += num[i];
        if (c > a)  
            break; 
    }
printf("%d\n", c);
return 0;

}

解答如下

#include <stdio.h>
#include <string.h>
int main()
{
    char t[100];
    gets(t);
    int len=strlen(t);
    char temp=t[len-2];
    for(int i=len-2; i>=0; i--)
    {
        if(t[i]!=t[len-1])
        {
            temp=t[i];
            break;
        }
    }
    t[len-2]=t[len-1];
    t[len-1]=temp;
    puts(t);
    return 0;
}

给你提供一个思路,可以讲按字符串类型输入x,然后每个对x进行遍历,如45678,逐个转化为int类型进行比较,只需要从个位向高位开始比较,只要发现高位小于低位的数,交换这两个即可!如45678,第一步比较发现7小于8,交换7/8得45687,就是比45678大的最小数!