输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是 0 。
数据范围:
#include <stdio.h> int main() { long long int a,result = 0; int num[15] = {0}; scanf("%lld",&a); while(a / 10 != 0 || a % 10 != 0) { int i = a % 10; if(num[i] == 0) { result = result * 10 + i; num[i] = 1; } a /= 10; } return result; }
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #define BIT 9 // 10的8次方等于9位数 //交换数组中的元素 void swap(char* a, char* b) { char temp = *a; *a = *b; *b = temp; } // 逆序字符串 void reverseString(char* buffer, int length) { int head = 0, tail = length - 1; while (head < tail) { swap(&buffer[head], &buffer[tail]); head++; tail--; } } // 去除重复元素 void removeDuplicateDigits(char ch[], int len) { if (len < 0 || len > 10) exit(-1); int hash[10] = {0}; int i = 0, index = 0; int num = 0; //使用哈希表,标记每一个数组元素,当且仅当出现次数为0时,进行操作,然后哈希值赋值为1. for (i = 0; i < len; i++) { num = ch[i] - '0'; //拿到字符数字对应的非字符数字。 if (hash[num] == 0) { hash[num] = 1; ch[index++] = ch[i]; } } ch[index]='\0'; } int main() { int input = 0; scanf("%d", &input); // 数据范围:1到10的8次方 if (input < 1 || input > (int)(pow(10, 8))) { return -1; } // 保证输入的整数最后一位不是 0 if (input % 10 == 0) { return -1; } char buffer[BIT + 1] = "\0"; sprintf(buffer, "%d", input); int length = strlen(buffer); //应该在反转字符串之后立马剔除重复元素 reverseString(buffer, length); removeDuplicateDigits(buffer, length); printf("%s\n", buffer); return 0; }
#include <stdio.h> #include <string.h> char InputNumChar[9] = {0}; char TempChar[9] = {0}; int main() { scanf("%s",InputNumChar); int Length = strlen(InputNumChar); for(int i = Length;i >= 0;i--) { if(strchr(TempChar,InputNumChar[i]) == NULL) strncat(TempChar,&InputNumChar[i],1); } printf("%s",TempChar); return 0; }
/** 题目:HJ9 提取不重复的整数 * 思路:用 数组 将 输入数据 逆序存储,然后从前往后遍历,每一个数字都跟所有地址在它前面的值进行比较,存在相同值则跳出比较循环,不存在相同值则记录该数字,最后用秦九韶算法求出应输出的数值 * 难点:1、理解题目的意思;2、其实这个题目我不赞同用 字符串 类型进行输入输出,但是也不失为做题的一种方法 */ #include <stdio.h> int main() { int N; int array[9]; int len = 0; int num = 0; int flag; // 输入整数 N ,用数组array[9] 逆序存储 N(比如 N = 123,则 array[9] = {1, 2, 3}) scanf("%d", &N); for(int i = 0; i < 9; i++) { if(N > 0) { array[i] = N % 10; N /= 10; len++; } if(N == 0) { break; } } // 记录array[0],然后从第 2 位到第 len-1 位遍历数组 array,与地址比其小的 array[k] 一一比较,立一个 flag 记录是否存在相同数值 // 存在相同数值则跳出比较循环,不存在相同数值则用 秦九韶算法 num = num * 10 + array[j] 记录数值 num = num * 10 + array[0]; for(int j = 1; j < len; j++) { flag = 0; for(int k = 0; k < j; k++) { if(array[j] == array[k]) { flag = 1; break; } } if(flag == 0) { num = num * 10 + array[j]; } } printf("%d", num); return 0; }
#include <stdio.h> int main() { int num,a; int count[10]={0}; scanf("%d",&num); while(num>0) { a=num%10; if(!count[a]) { count[a]=1; printf("%d",a); } num/=10; } return 0; }
#include <stdio.h> int main() { int num; int flag[10][2]={{0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{9,0}};//标志 int a=0,b[10]={0},i=0; scanf("%d",&num); while(num>0) { a=num%10;//获取最后一位 if(flag[a][1]==0)//判断取出来的数字原来有没有取出来过 { b[i]=a; flag[a][1]=1; i++; } num=num/10; } for(a=0;a<i;a++) { printf("%d",b[a]); } return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int input = 0; int output = 0; int flag[10] = {0}; scanf("%d", &input); if (input/10 == 0){ printf("%d",input); //个位 return 0; } while(input/10 != 0){ //只要不是个位数 就进行处理 if(flag[input%10] == 1){ input = input/10; //这个数字重复了 } else{ flag[input%10] = 1; //第一次出现这个数字 output =output*10 + (input%10); input = input/10; } } if(flag[input] == 1){ printf("%d",output); }else { printf("%d",output*10+input); } }
int main() { int n; char s[1000000] = { '\0' }; int i, len; scanf("%d", &n); s[0] = n % 10 + '0'; n = n / 10; len = 1; label:for (i = 0; i < len; i++) { if (s[i] != n % 10 + '0') continue; else break; } if (i == len) { s[i] = n % 10 + '0'; n = n / 10; len++; } else n = n / 10; if (n) goto label; puts(s); return 0; }
#include<stdio.h> int main() { int num_x, count, num_t; num_x = count = 0; scanf("%d", &num_x); num_t = num_x; while(num_t) { ++count; num_t /= 10; } int* vate = (int*)malloc(sizeof(int)*count); for(int i = 0; i<count; i++) { vate[i] = num_x %10; num_x /= 10; } for(int j = 0; j<count; j++) { if(vate[j] == -1) { continue; } for(int z = j+1; z<count; z++) { if(vate[j] == vate[z]) { vate[z] = -1; } } if(vate[j] != -1) { printf("%d", *(vate+j)); } } free(vate); vate = NULL; return 0; }