描述 | |
---|---|
知识点 | 数组 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入一个int型整数 |
输出 | 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 如果返的整数以0开头,去掉0; 如 intput:1010 output:1 |
样例输入 | 9876673 |
样例输出 | 37689 |
#include<iostream>
using namespace std;
bool seek(int arr[],int len,int num)
{
for(int i=0;i<len;i++)
{
if (num==arr[i]) return false;
}
return true;
}
int numReverse(int num)
{
int temp[10];
int count=0;
int result=0;
int i,tempnum;
while(num!=0)
{
tempnum=num%10;
if(tempnum!=0&&seek(temp,count,tempnum))
{temp[count]=tempnum;count++;}
num/=10;
}
for(i=0;i<count;i++)
result=result*10+temp[i];
return result;
}
int main()
{
int N;
cin>>N;
int res= numReverse(N);
cout<<res;
}
【优化】由于每一位的数只有0,1,,,9,所以建一个大小为10的数组,索引为每个位上面的值,这样可以减少查找的复杂度
#include<iostream>
using namespace std;
int numReverse(int num)
{
int temp[10];int temp2[10]={0};
int count=0;
int result=0;
int i,tempnum;
while(num!=0)
{
tempnum=num%10;
temp2[tempnum]++;
if(tempnum!=0&&temp2)[tempnum]<2)
{temp[count]=tempnum;count++;}
num/=10;
}
for(i=0;i<count;i++)
result=result*10+temp[i];
return result;
}
int main()
{
int N;
cin>>N;
int res= numReverse(N);
cout<<res;
}