一道面试题

来源:互联网 发布:国家重点软件企业申报 编辑:程序博客网 时间:2024/06/06 20:58

前一段时间有过一个面试,第一轮是技术测试。第一道测试题如下:

写一段C#,把一个金额转化成英文,如123456.78转化成One hundred and twenty three thousand four hundred and fifty six dollars seventy eight sents.

 

当然,只要把大致写出来就可以了,并不要求100%正确,但思路要正确。

这只是第一道,后面还有三道算法题和两道SQL题, 共两个小时,比较紧张。

 

我的答案如下,这是我回家后写的,考试的时候只是写了一个大概:

 

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

 

 

 

private String getNumberEnglishStr ( float pfNumber ) {

      String lsNumber = pfNumber.ToString ();

      String lsResult = "";

      int liDecimalPos = lsNumber.IndexOf ( "." );

      String lsDecimal = ( liDecimalPos < 0 ? "" : lsNumber.Substring ( liDecimalPos + 1 ) ) ;

      String lsInteger = ( liDecimalPos < 0 ? lsNumber : lsNumber.Substring ( 0, liDecimalPos ) );

      String lsLeftInteger = lsInteger;

      Int32 liGroup = 1;

      String lsCurrentNumber;

      int liCurrentNumber;

 

      StringBuilder lsbResult;

 

      while ( ! String.IsNullOrEmpty( lsLeftInteger ) ) {

            lsbResult = new StringBuilder ();

 

            if ( lsLeftInteger.Length > 3 ) {

                  lsCurrentNumber = lsLeftInteger.Substring ( lsLeftInteger.Length - 3, 3 );

                  lsLeftInteger = lsLeftInteger.Substring ( 0, lsLeftInteger.Length - 3 );

            } else {

                  lsCurrentNumber = lsLeftInteger;

                  lsLeftInteger = "";

            }

 

            // reomve prefix 0

            liCurrentNumber = int.Parse( lsCurrentNumber );

            lsCurrentNumber = liCurrentNumber.ToString ();

 

            if ( liCurrentNumber != 0 ) {

                             

                  Char[] laryChar = lsCurrentNumber.Reverse().ToArray<Char > ();

 

                  if ( laryChar.Length == 3 ) {

                        lsbResult.Append ( " " );

                        lsbResult.Append( this.GetHundredNumber( int.Parse( laryChar[ 2 ].ToString () )));

 

                        if ( laryChar[ 0 ] != '0' || laryChar[ 1 ] != '0' ) {

                              lsbResult.Append ( " and" );

                        }

                  }

 

                  if ( laryChar.Length >= 2 ) {

                        lsbResult.Append ( " " );

                        lsbResult.Append ( this.GetSecondNumber ( int.Parse ( laryChar[ 1 ].ToString () ), int.Parse ( laryChar[0].ToString() ) ) );

                  } else {

                        lsbResult.Append ( " " );

                        lsbResult.Append ( this.GetDigitalNumber ( int.Parse ( laryChar[ 0 ].ToString () ) ) );

                  }

 

            }

 

            if ( liGroup > 1 ) {

                  lsbResult.Append ( " " );

                  lsbResult.Append ( Enum.GetName ( typeof ( ENumber ), liGroup ) );

            }

 

            liGroup *= 1000;  

            lsResult =  lsbResult.ToString () + " " + lsResult ;

      }

 

      lsResult = lsResult.Trim ();

 

      if ( ! String.IsNullOrEmpty ( lsResult ) ) {

            if ( lsResult == "One" ) {

                  lsResult += " dollar";

            } else {

                  lsResult += " dollars";                   

            }

      }

 

      if (! String.IsNullOrEmpty( lsDecimal )) {

            lsResult += " " +GetSecondNumber (int.Parse( lsDecimal.Substring ( 0, 1 )),int.Parse( lsDecimal.Substring ( 1, 1 )) ) + " cents";

      }

      return lsResult;

                 

}

 

private String GetHundredNumber ( int piHundred ) {

      String lsResult = "" ;

 

      if ( piHundred != 0 ) {

            lsResult = Enum.GetName ( typeof ( ENumber ), piHundred ) + " " + Enum.GetName ( typeof ( ENumber ), 100 );

      }

 

      return lsResult;

}

 

private String GetSecondNumber ( int piSecond, int piThird ) {

      String lsResult = "";

 

      if ( piSecond != 1 && piSecond != 0 ) {

            lsResult = Enum.GetName ( typeof ( ENumber ), piSecond * 10 );

            if ( piThird != 0 ) {

                  lsResult = lsResult + " " + Enum.GetName ( typeof ( ENumber ), piThird );

            }

      } else {

            lsResult = Enum.GetName ( typeof ( ENumber ), piSecond * 10 + piThird );

      }

 

      return lsResult;

}

 

private String GetDigitalNumber ( int piThird ) {

      if ( piThird != 0 ) {

            return Enum.GetName ( typeof ( ENumber ), piThird );

      } else {

            return "";

      }

}

 

 

      public enum  ENumber {

            Zero = 0 ,

            One = 1,

            Two = 2,

            Three = 3,

            Four = 4,

            Five = 5,

            Six = 6,

            Seven = 7,

            Eight =8,

            Nine = 9,

            Eleven =11,

            Tweleve = 12,

            Thirteen  = 13,

            Forteen = 14,

            Fifteen = 15,

            Sixteen = 16,

            Seventeen = 17,

            Eighteen = 18,

            Nineteen = 19,

            Twenty = 20,

            Thirty = 30,

            Forty = 40,

            Fifty = 50,

            Sixty = 60,

            Seventy = 70,

            Eighty = 80,

            Ninety = 90,

            Hundred = 100,

            Thousand = 1000,

            Million = 1000000,

            Billion = 1000000000,

            Trillion = 1000000000

      }

 

 

 

原创粉丝点击