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

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(),很简单,就不写了。
ContractedBlock.gif主函数入口

转载于:https://www.cnblogs.com/lovexyz123/archive/2009/09/04/1560166.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值