给一个定义:对一个整数,若其中存在相邻两位上的数字相同,则称其为“重复的数”;现给定一个正整数n,求不小于n的最小的非“重复的数”。
分析过程如下:
先从中整数n中取两位数,分别做a,b,令m=n,对于m的值逐渐缩小10倍判断a是否等于b,若等于,将m加1,递归调用;再看特殊情况,如ab=99产生进位,将m+2,递归调用,递归截止,返回n的值。
int calNonRepetitionNum(int n){
if(n<10) //至少得是两位数,则小于10返回0
return 0;
int a,b;//分别作为十位、个位
int base=1;//计算倍数
int m=n;//m变化换值
while(m/10)
{
b=m;
a=m/10;
base*=10;
if(a==b)
{
if(a==9)
return calNonRepetitionNum((m+2)*base/10);//99位加2,产生进位
else
return
else
return calNonRepetitionNum((m+1)*base/10);//相同,重复数,当前个位加一,再乘当前倍数
}
m/=10;
}
return n;
}