描述
输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是 0 。
数据范围: 1 \le n \le 10^{8} \1≤n≤108
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1
输入:
9876673
复制输出:
37689
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <iostream>
#include <string.h>
#include <malloc.h>
#include <sstream>
#include <algorithm>
#include <cstring>
std::string itoa(int num)
{
std::stringstream oss;
oss << num;
std::string str(oss.str());
return str;
}
int checkArgument(char* arr, char num)
{
std::string str = arr;
return str.find(num);
}
void print(const char* str)
{
for(int i = 0; i < strlen(str); ++i)
{
std::cout << *(str+i);
}
std::cout << std::endl;
}
//去掉相同的字符 3766789
char* unionChange(const char* str)
{
int len = strlen(str);
std::string temp = str;
std::reverse(temp.begin(), temp.end());
char *arr = (char*)(malloc(sizeof(char) * len));
int sharedIndex = 0;
arr[sharedIndex] = temp[0];
// print(arr);
//
for(int i = 1; i < len; ++i) //遍历外循环
{
// print(temp.c_str());
int index = 0; //arr遍历的下标,每次都应该从头部即0开始
int rtn = checkArgument(arr, temp[i]); //检测当前元素是否出现在arr数组中
if(rtn != -1) //说明存在,那么跳过这个元素
{
continue;
}
else
{
arr[++sharedIndex] = temp[i];
}
}
return arr;
}
int main()
{
int num;
std::cin >> num;
std::string str = itoa(num);
char* arr = unionChange(str.c_str());
print(arr);
return 0;
}