一个比较有意思的题目,请求算法思路。
有一个数字数组,内容如下: 
 2011834310 
 2011834311 
 2011834312 
 2011834313   
 希望通过一个函数计算后,输出如下的字符串: 
 2011834310-3 
 该字符串表明是一个连续的数字组合。   
 如果数字数组,不连续,而且跨越了进制,例如: 
 2011834310 
 2011834311 
 2011834312 
 2011834313 
 2011834318 
 2011834319 
 2011834320   
 那么应该输出如下的字符串: 
 2011834310-3   2011834318-20   
 请大家给出一些思路,谢谢。
------解决方案--------------------1 数组排序 
 2 循环比较, 记录跨越的次数生成存储结果的数组. 
 3 循环生成 结果数组. 
------解决方案--------------------long[] input = new long[]{2011834310, 
                         2011834311, 
                         2011834312, 
                         2011834313, 
                         2011834318, 
                         2011834319, 
                         2011834320}; 
             int mark = 0; 
             int current = 0; 
             while (current  < input.Length) 
             { 
                 mark = current; 
                 current++; 
                 while (current  < input.Length && input[current] - input[current - 1] == 1) 
                 { 
                     current++; 
                 } 
                 Console.Write(input[mark] +  "- "); 
                 string str1 = input[mark].ToString(); 
                 string str2 = input[current - 1].ToString(); 
                 int index = 0; 
                 while (str1[index] == str2[index]) 
                 { 
                     index++; 
                 } 
                 Console.WriteLine(str2.Substring(index)); 
             }
------解决方案--------------------排序,循环记录次数,格式化输出
------解决方案--------------------\\封装一下,并考虑位数差,做成这样 
     public class bas 
     { 
         private long startvalue, lastvalue;   
         public long Lastvalue 
         { 
             get { return lastvalue; } 
         }   
         public long Startvalue 
         { 
             get { return startvalue; } 
         }   
         public bas(long i) 
         { 
             startvalue = lastvalue = i; 
         }   
         private string calString() 
         { 
             StringBuilder sn1=new StringBuilder(startvalue.ToString()), sn2=new StringBuilder(lastvalue.ToString()),tmps=new StringBuilder(); 
             if(sn2.Length> sn1.Length) 
             { 
                 sn1.Insert(0,  "0 ", sn2.Length - sn1.Length); 
             }   
             for (int index = 0; index  < sn2.Length;index++ ) 
             { 
                 if (sn2[index] != sn1[index]) 
                 { 
                     if (index >  0) tmps.Append(sn2.ToString(0, index )); 
                     tmps.Append(sn1.ToString(index, sn1.Length - index)); 
                     tmps.Append( "- "); 
                     tmps.Append(sn2.ToString(index, sn2.Length - index)); 
                     break; 
                 } 
             } 
             if(tmps.Length!=0)return tmps.ToString(); 
             else return sn1.ToString(); 
         }   
         public string AddNew(long i) 
         { 
             if (i == lastvalue + 1) { 
                 lastvalue = i; 
                 return null; } 
             else 
             { 
                 string ret = calString(); 
                 startvalue = lastvalue = i; 
                 return ret; 
             }