求算法:给定一个long部类数字A,返回大于A的最小“不重复数”

求算法:给定一个long类型数字A,返回大于A的最小“不重复数”
果一个数字十进制表达时,不存在连续两位数字相等,则称之为“不重复数”。例如,105,1234和12121都是“不重复数”。给定一个long类型数字A,返回大于A的最小“不重复数”。


要求就是这么个样子,目前我做的是获取第位数字,然后把0-9 这10个数字出现次数进行统计,如果>2就说明是重复数,同时获取重复的是第几位数,把原来的【数字+(重复的数+1)*(10^位数)】,这样就能够进行一次把重复的数字去掉。但是这个需要做重复判断,我怎么都搞不定

不知道谁还有更好的算法没有,有好的思路或者算法贴上来给小弟参考参考。。。。

#include<iostream.h>

int tab[]={0,0,0,0,0,0,0,0,0,0}; //存储10个数字每个数字出现次数的表
int wei=0,shu=0; //wei存储第几位开始重复,shu存储重复的数字是什么
int signal;

void comp(int temp[],int i); //审明比较函数,用于比较是否有重复数字
void plus(int a,int wei,int shu); //加法函数,使重复数变为不重复数

void main()
{
long a,i; //a存储输入的值,i存储数字位数
int temp[32]; //数组b存储相应位的数字

i=0;
cin>>a;

//对输入进行处理,把每位数字取出,并依次存储在temp[]数组中
while(a)
{
temp[i]=a%10;
a/=10;
i++;
}

//输出每个位的数字 
for(int j=i;j>0;j--)
{
cout<<"temp["<<j<<"] = "<<temp[j-1]<<endl;
}


comp(temp,i); //进行比较判断,是否有重复数
if(shu)
{
cout<<"没有重复数字!"<<endl;

}
plus(a,wei,shu);
cout<<"plus!"<<endl;

//输出每个数字出现次数
for(int k=0;k<10;k++)
{
cout<<"tab["<<k<<"] = "<<tab[k]<<endl;
}
}

//比较函数,判断是否有重复数字,
void comp(int temp[],int i)
{
int lengh=i+1; //数字总位数+1,计算第n位重复的转换量


for(;i>0;i--) //每个位数进行判断是什么数,找到相应的数在tab表里加1
{

//数字出现则在相应的tab表里+1
switch(temp[i-1])
{
case 0 :
tab[0]++;
if(tab[0]>1)

cout<<"第"<<lengh-i<<"位重复!"<<endl;
signal++;
wei=lengh-i;
}
 break;
case 1 :
tab[1]++;
if(tab[1]>1) 
{
cout<<"第"<<lengh-i<<"位重复!"<<endl;
signal++;
wei=lengh-i;
}
 break;
case 2 :
tab[2]++;
if(tab[2]>1) 
{
cout<<"第"<<lengh-i<<"位重复!"<<endl;
signal++;
wei=lengh-i;
}
 break;
case 3 :
tab[3]++;
if(tab[3]>1) 
{
cout<<"第"<<lengh-i<<"位重复!"<<endl;
signal++;
wei=lengh-i;
}
 break;
case 4 :
tab[4]++;
if(tab[4]>1) 
{
cout<<"第"<<lengh-i<<"位重复!"<<endl;
signal++;
wei=lengh-i;
}
 break;
case 5 :
tab[5]++;
if(tab[5]>1) 
{
cout<<"第"<<lengh-i<<"位重复!"<<endl;
signal++;
wei=lengh-i;
}
 break;
case 6 :
tab[6]++;
{if(tab[6]>1) 
{
cout<<"第"<<lengh-i<<"位重复!"<<endl;
signal++;
wei=lengh-i;
}
 break;
case 7 :
tab[7]++;
if(tab[7]>1)
{
cout<<"第"<<lengh-i<<"位重复!"<<endl;
signal++;
wei=lengh-i;
}
 break;
case 8 :
tab[8]++;
if(tab[8]>1) 
{
cout<<"第"<<lengh-i<<"位重复!"<<endl;
signal++;
wei=lengh-i;
}
 break;
case 9 :
tab[9]++;
if(tab[9]>1)