现在的位置: 首页 > 综合 > 正文

第三道面试题

2014年03月09日 ⁄ 综合 ⁄ 共 1816字 ⁄ 字号 评论关闭

上次我解释了第一道面试题。现在再来看看第三道。

有一种数字,正过来和倒过来读是一样的,如123454321,99877899。我不知道中文叫什么,战且称之为回文数字。现给定一个数值,求小于此数值的最大回文数字,并能被30之内的素数整除。

 

我的分析如下。

 要求最大的回文数字,要把数字分一半,前一半减一,在把倒过来加上。如

10000的最大的回文数字是9999,下一个是9889,在下一个是9779 ....

100000的最大的回文数字是99999,下一个是99899,在下一个是99799 ....

 

30之内的素数是2 3 5 7 11 13 17 19 23 29. 为了简化,我下面就用了2 3来做测试.

这个数字其实是非常大的。为了简化,我就用了int的类型。

这是我个人的想法,未必对。只是参考。

========================================================================

private
int CalculateNumber ( int piNumber ) {

     
int liResult = piNumber ;

     
while ( liResult != 0 ) {

           
liResult = GetMaxNumber ( liResult );

           
if ( dividePrimNumber ( liResult ) ) {

                 
break;

           
}

     
}

     
return liResult;

}

 

private
Boolean dividePrimNumber(
int
piNumber ) {

     
return ( piNumber % 2 == 0

           
&& piNumber % 3 == 0

           
//&& piNumber % 5 == 0

           
//&& piNumber % 7 == 0

           
//&& piNumber % 11 == 0

           
//&& piNumber % 13 == 0

           
//&& piNumber % 17 == 0

           
//&& piNumber % 19 == 0

           
//&& piNumber % 23 == 0

           
//&& piNumber % 29 == 0

           
);

}

 

 

private
int GetMaxNumber ( int piNumber ) {

 

     
String lsFullNumber = piNumber.ToString ();

     
String lsFirstHalf;

     
String lsLastHalf;

     
int liNumLength = lsFullNumber.Length;

     
int liFirstHalfLength = liNumLength / 2 + liNumLength % 2;       

     
int liReverseLenght = liNumLength / 2;

 

     
lsFirstHalf = lsFullNumber.Substring ( 0, liFirstHalfLength );               
// get first half of number

     
lsFirstHalf = ( int.Parse ( lsFirstHalf ) - 1 ).ToString ();                       
      // minus one

     
lsLastHalf = lsFirstHalf.Substring ( 0, ( lsFirstHalf.Length > liReverseLenght ? liReverseLenght : lsFirstHalf.Length ) );

     
lsLastHalf = new
String
( lsLastHalf.ToArray ().Reverse ().ToArray () );     
// reverse the first half of number

 

     
return int.Parse ( lsFirstHalf + lsLastHalf );

}

 

 =========================================================================================

这不是算法题,这是一道.net的编程题目。

抱歉!评论已关闭.