趣味算法:返回不重复数的实现

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(),很简单,就不写了。
posted @ 2009-09-04 11:17  夏小冰  阅读(2353)  评论(29编辑  收藏  举报
云水禅心 We Belong Together-Mariah Carey HERO-Mariah Carey Yesterday once more 献给爱丽丝 海边的祈祷 秋日私语 Time To Say Goodbye 我用所有报答爱-张靓颖 女人花-梅艳芳 简简单单-林俊杰 anyclub-李孝利 10minetes-李孝利