一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案

          我們公司的老總心血來(lái)潮,給大家出了一道編程題,想測(cè)試一下大家的編程能力。 
          編寫(xiě)Java程序求7進(jìn)制數(shù)1234560654321的10進(jìn)制結(jié)果,要求:盡最大可能減少代碼量、內(nèi)存占用量和計(jì)算量。

          我突發(fā)奇想,為了減少代碼量,我用了Math類(lèi)的pow方法,代碼如下:

          double sum=0;
                  
          for(int i=0;i<6;i++)
                  {
                    sum
          += (i+1*(Math.pow(7,12- i)+Math.pow(7, i));
                    
                   }
                  System.out.println(
          "用了Math函數(shù):"+sum);

          我把程序給老總看,老總看后,在題目的要求中加上了一條:不允許用Math 類(lèi),我暈!
          他說(shuō)要測(cè)試我的基礎(chǔ)編程能力。
          于是我將程序改成:

          double sum = 0;
                  
          double a = 1;
                  
          int i=0;
                  
          int j=0;
                  
          double temp=0;

                  
          for (i = 0; i < 6; i++)
                  {
                      a 
          = 1;
                      temp
          =0;
                      
          for (j = 0; j < 12 - i; j++)
                      {
                          a 
          *= 7;
                      }
                      temp 
          += a;
                      a 
          = 1;

                      
          for (j = 0; j < i; j++)
                      {
                          a 
          *= 7;
                      }
                      
                      temp 
          += a;
                      temp 
          *= (i + 1);
                      sum
          +=temp;
                      
                  }
                  System.out.println(
          "用了78次乘法:"+sum);

          老總認(rèn)為我的乘法執(zhí)行次數(shù)過(guò)多。
          我再次修改程序:

          double a = 1;
                  
          int i=0;
                  
          int j=0;
                  
          double sum=0;
                  
          for (i = 1; i <=6; i++)
                  {
                      a 
          = 1;
                      
          for (j = 1; j <=6- i; j++)
                      {
                          a 
          *= 7;
                          
                      }
                      sum
          +=i*a;
                      
                  }
                  sum
          *=7*7*7*7*7*7*7;
                  
          for (i = 1; i <=6; i++)
                  {
                      a 
          = 1;

                      
          for (j = 1; j <= i-1; j++)
                      {
                          a 
          *= 7;
                      }
                      
                      sum 
          += i*a;
                      
                  }
                  System.out.println(
          "用了49次乘法:"+sum);

          老總看后還是不滿(mǎn)意,他終于出手了。下面是他的程序,
                  int[] s={1,2,3,4,5,6,0,6,5,4,3,2,1};
                  
          double sum=s[0];
                  
          for(int k=1;k<13;k++)
                  {
                      sum
          =sum*7+s[k];
                  }
                  System.out.println(
          "用了12次乘法:"+sum);

          怎么樣?夠狠吧!只用了12次乘法,大家還有什么其他的高招嗎?如果有,請(qǐng)給我留言,不勝感激。

          posted on 2007-09-21 22:23 我為J狂 閱讀(1972) 評(píng)論(18)  編輯  收藏 所屬分類(lèi): Java算法

          評(píng)論

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案。 2007-09-21 23:06 千里冰封

          呵呵,有意思  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-21 23:39 下雨

          真是厲害呀
          很好很不錯(cuò)GOOD
          上品

          -------------------------------------------------
          http://www.sy555.com  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案[未登錄](méi) 2007-09-21 23:49 Javacap

          基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)問(wèn)題,作Java作久了就遠(yuǎn)離了基礎(chǔ)?  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 00:40 啊光

          呵呵,表驅(qū)動(dòng)法.  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 01:24 驚鴻逝水

          你們公司的老總很閑嘛,不做運(yùn)營(yíng),管理決策嗎?  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 01:45 bean

          最后一個(gè)能算是算法嗎?把13個(gè)數(shù)字放數(shù)組里面?另外再給你個(gè)數(shù)怎么辦?還不得挨個(gè)算出來(lái)。  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 04:54 jie

          搞笑,時(shí)代變了  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 10:39 adalovelacer

          最后一個(gè)能算是算法嗎?把13個(gè)數(shù)字放數(shù)組里面?另外再給你個(gè)數(shù)怎么辦?還不得挨個(gè)算出來(lái)

          說(shuō)得十分對(duì),如果這樣都算算法的的話(huà),最快的算法是:

          sum = 1234560654321的10進(jìn)制結(jié)果;
          System.out.println("一次乘法都不用:"+sum);  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 11:32 千里冰封

          Long.parseLong("1234560654321", 7);


          這樣豈不是更簡(jiǎn)單?
            回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 11:43 我為J狂

          @千里冰封
          你的方法確實(shí)很簡(jiǎn)單,不過(guò)這道題考察的不是使用JavaAPI的能力,而是基礎(chǔ)編程能力,也就是說(shuō)不能使用JDK中定義好的Java方法。  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 11:52 我為J狂

          @bean
          你提到的關(guān)于算法靈活性的問(wèn)題很好,我將最后一個(gè)算法更改為
          static double getValue(String str)
          {
          char[] c = str.toCharArray();
          double sum = Double.parseDouble(c[0] + "");
          for (int k = 1; k < 13; k++)
          {
          sum = sum * 7 + Double.parseDouble(c[k] + "");
          }
          return sum;
          }
          System.out.println("用了12次乘法:" + getValue("1234560654321"));  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 11:54 我為J狂

          @adalovelacer
          我不太理解你的寫(xiě)法,你不會(huì)是在起哄吧?  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-09-22 11:59 我為J狂

          @驚鴻逝水
          每個(gè)老總都要做運(yùn)營(yíng),管理決策,不過(guò)我們老板是做技術(shù)出身,清華碩士,他對(duì)員工要求很?chē)?yán),他的員工僅僅具有編程能力是遠(yuǎn)遠(yuǎn)不夠的,他經(jīng)常會(huì)給他的員工出一些物理數(shù)學(xué)之類(lèi)的問(wèn)題來(lái)難為大家。  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案[未登錄](méi) 2007-09-22 12:15 Javacap

          算法是算法,就是多項(xiàng)式運(yùn)算的算法,隨便一本數(shù)據(jù)結(jié)構(gòu)書(shū)上都應(yīng)該有。  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案[未登錄](méi) 2007-09-27 12:50 NeedJava

          static double getValue( String value, int radix )
          {
           if( value==null||radix<0 )
            {
             return 0.00;
            }

           int length=value.length();

           double sum=(double)( value.charAt( 0 ) );

           for( int i=1; i<length; i++ )
            {
             sum=sum*radix+(double)( value.charAt( i ) );
            }

           return sum;
          }

          System.out.println( "用了12次乘法:"+getValue( "1234560654321", 7 ) );

          Double.parseDouble( c[k]+"" )非常愚蠢,難道LZ不覺(jué)得?其實(shí)就是強(qiáng)行轉(zhuǎn)換,

          沒(méi)必要toCharArray,建議LZ還是看看Java的源代碼再考慮算法吧!如果你能虛心的接受我的建議。  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案[未登錄](méi) 2007-09-27 12:56 NeedJava

          我覺(jué)得一個(gè)好的管理者,不僅要給員工以激勵(lì),更要加強(qiáng)培養(yǎng)員工的綜合素質(zhì)(比如口才,交際能力,經(jīng)濟(jì)知識(shí)),而不是專(zhuān)于某些算法,畢竟不是研究院!我們得知道,如果我們到了一定年齡,不能花更多精力編程了,我們?cè)撊绾无D(zhuǎn)型!  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案 2007-10-03 20:25 我為J狂

          @NeedJava
          人外有人,天外有天,我一定虛心向您學(xué)習(xí)。  回復(fù)  更多評(píng)論   

          # re: 一個(gè)簡(jiǎn)單問(wèn)題的巨牛解法方案[未登錄](méi) 2013-11-25 09:34 HP

          DOOD  回復(fù)  更多評(píng)論   

          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(11)

          隨筆分類(lèi)(48)

          文章分類(lèi)(29)

          常去逛逛

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 灵石县| 怀安县| 会东县| 长兴县| 武邑县| 县级市| 临猗县| 浠水县| 巴彦淖尔市| 华坪县| 固安县| 日照市| 株洲县| 金堂县| 同仁县| 青龙| 西乡县| 巴楚县| 武山县| 元谋县| 光山县| 商丘市| 师宗县| 门源| 宣汉县| 尤溪县| 深水埗区| 刚察县| 长岭县| 松溪县| 沙湾县| 溆浦县| 当雄县| 淳安县| 彭山县| 涟水县| 高密市| 宁远县| 绥宁县| 望城县| 定陶县|