#include <stdio.h>
#include<malloc.h>
int* arr;
 
 //获取数组的长度
int Arrlen(int num) {
    int len = 0;
    while (num) {
        num /= 10;
        len++;
    }
    return len;
}

//取出每一位放入数组,且此时的刚好为倒序
int* Arrcul(int n, int len) {
    arr = (int*)malloc(len * sizeof(int));
    int index = 0;
    int i;
    while (n) {
        arr[index++] = n % 10;
        n /= 10;
    }
    return arr;
}

int main() {
    int n, i, j, k;
    scanf("%d", &n);
    int len = Arrlen(n);
    arr = Arrcul(n, len);

   //删除数组重复元素
    for (i = 0; i < len; i++) { //循环判断数组中每一个数
        for (j = i + 1; j < len; j++) { //判断arr[i]后边的数是否和arr[i]相等
            if (arr[i] == arr[j]) {
                for (k = j; k < len - 1; k++)
                    arr[k] = arr[k + 1]; //将arr[j]后面的元素全往前移一个位置
                           j--;    //arr[j+1]取代arr[j]位置,为使下次从arr[j+1]开始查找,j减一(为使j保持不变)
                           len--;    //数组长度减一
            }
        }
    }

//输出数组
    for(i=0;i<len;i++)
        printf("%d",arr[i]);

}

通俗易懂的思路

代码功能分三块:

1.数字长度的获取函数

int Arrlen(int num) {

    int len = 0;

    while (num) {

        num /= 10;

        len++;

    }

    return len;

}

2.数字各元素的获取并存入数组

int* Arrcul(int n, int len) {

    arr = (int*)malloc(len * sizeof(int));

    int index = 0;

    int i;

    while (n) {

        arr[index++] = n % 10;

        n /= 10;

    }

    return arr;

}

3、数组重复元素的删除

    for (i = 0; i < len; i++) { //循环判断数组中每一个数

        for (j = i + 1; j < len; j++) { //判断arr[i]后边的数是否和arr[i]相等

            if (arr[i] == arr[j]) {

                for (k = j; k < len - 1; k++)

                    arr[k] = arr[k + 1]; //将arr[j]后面的元素全往前移一个位置

                           j--;    //arr[j+1]取代arr[j]位置,为使下次从arr[j+1]开始查找,j减一(为使j保持不变)

                           len--;    //数组长度减一

            }

        }

    }