趣味算法:返回不重复数的实现
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 }