#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--; //数组长度减一
}
}
}