在一行上输入一个整数
代表给定的整数。保证
的最后一位不为
。
在一行上输出一个整数,代表处理后的数字。
9876673
37689
在这个样例中,先将数字倒序,得到
,然后去除重复数字,得到
。
12345678
87654321
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int num, val[10] = {0};
while(n != 0){
num = n % 10;
if(val[num] == 0){
printf("%d", num);
val[num] = 1; //set flag = 1
}
n /= 10;
}
printf("\n");
return 0;
} #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);
}
}