BingWay原创作品,转载请注明作者和出处。
如果一个数字十进制表达时,不存在连续两位相同,则称之为“不重复数”。例如,105、164和198都是“不重复数”,而11、100和122不是。
下面用一个long类型( long类型数字A),实现返回大于A的最小“不重复数”。
1
static
long
gNext(
long
A)
2 {
3 long n = A;
4 int [] a = new int [ 100 ];
5 int cnt = 0 ; // 输入数的位数
6 while (n > 0 )
7 {
8 a[cnt ++ ] = ( int )(n % 10 );
9 n /= 10 ; // 输入几位数执行几遍
10 }
11 long tmp = 0 ; // 存放临时值
12 for ( int j = cnt - 1 ; j >= 0 ; j -- ) // 循环取值
13 {
14 tmp = tmp * 10 + a[j]; // 按高位取值
15 if (a[j] == a[j + 1 ]) // 比较两个数是否相等
16 {
17 tmp = tmp + 1 ; // 比较结果相等则加1
18 }
19
20 }
21 if (cnt > 2||tmp>90 ) /// /输入位数大于两位执行
22 {
23 cnt = 1 ;
24 for ( int i = cnt; i > 0 ; i -- )
25 {
26 if (a[i] == a[i - 1 ]) // 比较两个数是否相等
27 {
28 tmp = tmp + 1 ;
29 }
30 }
31 }
32 return tmp;
33 }
34 static long getNext( long A)
35 {
36 return gNext(A + 1 );
37 }
调用一下getNext(),很简单,就不写了。
2 {
3 long n = A;
4 int [] a = new int [ 100 ];
5 int cnt = 0 ; // 输入数的位数
6 while (n > 0 )
7 {
8 a[cnt ++ ] = ( int )(n % 10 );
9 n /= 10 ; // 输入几位数执行几遍
10 }
11 long tmp = 0 ; // 存放临时值
12 for ( int j = cnt - 1 ; j >= 0 ; j -- ) // 循环取值
13 {
14 tmp = tmp * 10 + a[j]; // 按高位取值
15 if (a[j] == a[j + 1 ]) // 比较两个数是否相等
16 {
17 tmp = tmp + 1 ; // 比较结果相等则加1
18 }
19
20 }
21 if (cnt > 2||tmp>90 ) /// /输入位数大于两位执行
22 {
23 cnt = 1 ;
24 for ( int i = cnt; i > 0 ; i -- )
25 {
26 if (a[i] == a[i - 1 ]) // 比较两个数是否相等
27 {
28 tmp = tmp + 1 ;
29 }
30 }
31 }
32 return tmp;
33 }
34 static long getNext( long A)
35 {
36 return gNext(A + 1 );
37 }
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)