在一行上输入一个正整数
代表给定的整数。
保证
的最后一位不为
。
在一行上输出一个整数,代表处理后的数字。
9876673
37689
在这个样例中,先将数字倒序,得到
,然后去除重复数字,得到
。
12345678
87654321
#include <stdio.h> #include <string.h> int main() { int n; scanf("%d",&n); int hash[10]={0}; int m=n; int num; while(m!=0){ num=m%10; if(hash[num]==0){ printf("%d",num); } hash[num]++; m/=10; } return 0; }
#include <stdio.h> #include <string.h> int main() { char str[10] = {0}; char str_new[10] = {0}; char num_tab[100] = {0}; while (scanf("%s", str) != EOF) { // 注意 while 处理多个 case // 将正整数当字符串输入,逆序,标记已输出字符 //printf("%s", str); int len = strlen(str); for (int i = 0; i < len; i++) { str_new[i] = str[len - i - 1]; } for (int i = 0; i < len; i++) { if (num_tab[str_new[i]] == 0) { printf("%c", str_new[i]); num_tab[str_new[i]]++; } } } return 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; }