经典指数          
原因
1560
浏览数
0
收藏数
 

给一个定义:对一个整数,若其中存在相邻两位上的数字相同,则称其为“重复的数”;现给定一个正整数n,求不小于n的最小的非“重复的数”。

     举报   纠错  
 
切换
1 个答案

分析过程如下:

先从中整数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;

}

 
切换
撰写答案