对于11222332244这种就变位1324
代码如下
#include<stdio.h>
#include<string.h>
int main()
{
long long num=0;
printf("请输入一个整数:");
scanf("%lld", &num);
char digits[400] = "\0";//假设输入的正整数不超过10位数
int i = 0;
do {
digits[i++] = num % 10 + '0';
num /= 10;
} while (num > 0);
digits[i] = '\0';//添加字符串结束符
int j=0;
char temp;
for (i = 0, j = strlen(digits) - 1; i < j; i++, j--)
{
temp = digits[i];
digits[i] = digits[j];
digits[j] = temp;
}
//printf("%s",digits);
char uniqueDigits[10] = "\0";//存储去重后的数组,去重之后最多10个数
int seen[10] = { 0 };//存储已经出现过的数字,0的时候表示为没有出现
for (int i = strlen(digits); i > 0; i--)//现在通过这个for循环得下来一个倒叙的不重复
{
int digit = digits[i - 1] - '0';//得到相应的整型数字
if (!seen[digit])//这是在说出现 if(里面是1的话),就执行if里面的句子
{//也就是说没有出现的往下写
int len = strlen(uniqueDigits);//得下来此时去重后的数组长度
//
//printf("%d\n",len);
//
uniqueDigits[len] = digits[i - 1];//然后将这个没出现的存到去重数组后面,这就有一定问题
uniqueDigits[len + 1] = '\0';//更新字符串结束符位置
seen[digit] = 1;//将当前数字标记为已出现
}
}
for (i = 0, j = strlen(uniqueDigits) - 1; i < j; i++, j--)
{
temp = uniqueDigits[i];
uniqueDigits[i] = uniqueDigits[j];
uniqueDigits[j] = temp;
}
int value = 0;
for (i = 0; i < strlen(uniqueDigits); i++)
{
value = value * 10 + (uniqueDigits[i] - '0');
}
printf("%d", value);
return 0;
}
如果分开写
//这个是建立函数的,
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void reverse(char s[]);
void itoa(int num, char s[]);
void Char_exchange_int(char s[], int* value);
int main()
{
long long num;
printf("请输入一个整数:");
scanf("%lld", &num);
char digits[400];//假设输入的正整数不超过10位数
itoa(num, digits);
//
//printf("%s",digits);检验能够将整型转为字符串
//
char uniqueDigits[10] = "\0";//存储去重后的数组,去重之后最多10个数
int seen[10] = { 0 };//存储已经出现过的数字,0的时候表示为没有出现
for (int i = strlen(digits); i>0; i--)//现在通过这个for循环得下来一个倒叙的不重复
{
int digit = digits[i-1]-'0';//得到相应的整型数字
if (!seen[digit])//这是在说出现 if(里面是1的话),就执行if里面的句子
{//也就是说没有出现的往下写
int len = strlen(uniqueDigits);//得下来此时去重后的数组长度
//
//printf("%d\n",len);
//
uniqueDigits[len] = digits[i-1];//然后将这个没出现的存到去重数组后面,这就有一定问题
uniqueDigits[len + 1] = '\0';//更新字符串结束符位置
seen[digit] = 1;//将当前数字标记为已出现
}
}
reverse(uniqueDigits);
int value = 0;
Char_exchange_int(uniqueDigits, &value);
printf("去重后的数字为%lld", value);
//reverse(uniqueDigits);
//printf("去重后的数字为%s", uniqueDigits);
return 0;
}
//前后相倒换
void reverse(char s[]) {
int i, j;
char temp;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--)
{
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
//将int型数据转化为char
void itoa(int num, char s[])
{
int i = 0;
do {
s[i++] = num % 10 + '0';
num /= 10;
} while (num > 0);
s[i] = '\0';//添加字符串结束符
reverse(s);//反转字符串
}
//char转化为int
void Char_exchange_int(char s[],int *value)
{
for (int i=0; i<strlen(s);i++)
{
(*value)=(*value)*10+(s[i]-'0');
}
}
运行代码,都是可以的