<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    走在架構(gòu)師的大道上 Jack.Wang's home

    Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks
     階乘是個(gè)很有意思的東西,可能很多朋友看到關(guān)于他的計(jì)算就怕了,其實(shí)沒(méi)什么,看完下面兩個(gè)問(wèn)題您應(yīng)該有低了。

            1.       給定一個(gè) N ,求出N!末尾有多少個(gè)零,比如 N=10,N!=3628800,N!末尾有兩個(gè)零。
    2.       N!的二進(jìn)制表示中最低為1的位置,比如 11010010, 最低為1的位置為2。

    問(wèn)題一解法:

        在上一個(gè) blog 中介紹的子數(shù)組乘積最大值的問(wèn)題中,有朋友考慮到溢出的問(wèn)題,在這個(gè)問(wèn)題中,我們從那些數(shù)相乘能得到10這個(gè)命題開(kāi)始思考。比如N=K×10m那么N!后面就有m個(gè)零。這個(gè)問(wèn)題轉(zhuǎn)化為將N!進(jìn)行分解,如N=2a×3b×5c 很顯然 10=2×5,那么零的個(gè)數(shù)m=min(a,c), 一個(gè)數(shù)能夠被2整除的機(jī)率比5要大很多因此 m=c,因此轉(zhuǎn)化為求 c的問(wèn)題,具體算法如:

     1publicclass factorial {
     2

     3    privatestaticint zeroNum(int n) 
    {
     4

     5       int ret = 0
    ;
     6

     7       for (int i = 1; i <= n; i++
    {
     8

     9           int j =
     i;
    10

    11           while (j % 5 == 0
    {
    12

    13              ret++
    ;
    14

    15              j /= 5
    ;
    16

    17           }

    18
    19       }

    20
    21
           returnret;
    22

    23    }

    24
    25    privatestatic BigInteger fac(long n) 
    {
    26

    27       BigDecimal a = new BigDecimal(1
    );
    28

    29
           BigDecimal b;
    30

    31       for (long i = 1; i <= n; i++
    {
    32

    33           b = new
     BigDecimal(i);
    34

    35           a =
     a.multiply(b);
    36

    37       }

    38
    39       return
     a.toBigInteger();
    40

    41    }

    42

    問(wèn)題二解法:

    我們都知道一個(gè)數(shù)除以2可以表示為 N>>1,即向右移動(dòng)一位。這個(gè)問(wèn)題轉(zhuǎn)化為求 N! 含有2的質(zhì)因數(shù)的個(gè)數(shù)問(wèn)題。

     1    staticclass PrimeFactor {
     2

     3       publicstaticint primeFactor(int n) 
    {
     4

     5           int ret = 0
    ;
     6

     7           while (n != 0
    {
     8

     9              n >>= 1
    ;
    10

    11              ret +=
     n;
    12

    13           }

    14
    15           return ret + 1
    ;
    16

    17       }

    18
    19       publicstatic String binaryString(int n) 
    {
    20

    21           return
     Integer.toBinaryString(fac(n).intValue());
    22

    23       }

    24
    25    }

    26

    完整程序:

      1package org.blogjava.arithmetic;
      2

      3import
     java.math.BigDecimal;
      4

      5import
     java.math.BigInteger;
      6

      7
    /**
      8
      9 * @author
     Jack.Wang
     10

     11 * @see http://jack2007.blogjava.net/

     12
     13 */

     14
     15public class factorial 
    {
     16

     17       private static int zeroNum(int n) 
    {
     18

     19              int ret = 0
    ;
     20

     21              for (int i = 1; i <= n; i++
    {
     22

     23                     int j =
     i;
     24

     25                     while (j % 5 == 0
    {
     26

     27                            ret++
    ;
     28

     29                            j /= 5
    ;
     30

     31                     }

     32
     33              }

     34
     35              return
     ret;
     36

     37       }

     38
     39       private static BigInteger fac(long n) 
    {
     40

     41              BigDecimal a = new BigDecimal(1
    );
     42

     43
                  BigDecimal b;
     44

     45              for (long i = 1; i <= n; i++
    {
     46

     47                     b = new
     BigDecimal(i);
     48

     49                     a =
     a.multiply(b);
     50

     51              }

     52
     53              return
     a.toBigInteger();
     54

     55       }

     56
     57       static class PrimeFactor 
    {
     58

     59              public static int primeFactor(int n) 
    {
     60

     61                     int ret = 0
    ;
     62

     63                     while (n != 0
    {
     64

     65                            n >>= 1
    ;
     66

     67                            ret +=
     n;
     68

     69                     }

     70
     71                     return ret + 1
    ;
     72

     73              }

     74
     75              public static String binaryString(int n) 
    {
     76

     77                     return
     Integer.toBinaryString(fac(n).intValue());
     78

     79              }

     80
     81       }

     82
     83       public static void main(String[] args) 
    {
     84

     85              System.out.println("12!為" + fac(12+ ",后面零的個(gè)數(shù)為" + zeroNum(12
    ));
     86

     87              System.out.println("12!的二進(jìn)制為" + PrimeFactor.binaryString(12+ ",1的位置"

     88
     89                            + PrimeFactor.primeFactor(12
    ));
     90

     91       }

     92
     93       
    /**
     94
     95
            out: 
     96

     97
            12!為479001600,后面零的個(gè)數(shù)為2
     98

     99
            12!的二進(jìn)制為11100100011001111110000000000,1的位置11
    100

    101        */

    102
    103}

    104




    本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問(wèn)題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見(jiàn)可給我留言,愿共同學(xué)習(xí)進(jìn)步。
    posted on 2008-10-18 12:05 Jack.Wang 閱讀(4301) 評(píng)論(1)  編輯  收藏 所屬分類: 數(shù)學(xué)&算法

    Feedback

    # re: 微軟面試題---階乘問(wèn)題 2008-10-22 17:01 icalm
    private static int zeroNum(int n){
    int ret = 0;

    while(n >= 5){
    ret += n/5;
    n = n / 5;
    }
    return ret;
    }  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 久久精品国产亚洲av麻豆| 精品国产人成亚洲区| 亚洲国产精品网站久久| 99在线热视频只有精品免费| 亚洲大成色www永久网站| 精品熟女少妇aⅴ免费久久| 亚洲精品无码日韩国产不卡?V| 成人精品国产亚洲欧洲| 国产福利免费观看| 国产亚洲男人的天堂在线观看 | 中文字幕在线观看亚洲日韩| 免费视频爱爱太爽了| 亚洲另类视频在线观看| 欧美大尺寸SUV免费| 亚洲欧美日韩国产精品一区| 国产男女猛烈无遮挡免费视频网站| 激情婷婷成人亚洲综合| 亚洲国产成人久久一区WWW| jizz在线免费播放| 久久亚洲国产精品| 1000部拍拍拍18勿入免费凤凰福利| 亚洲午夜精品国产电影在线观看| 国产一卡2卡3卡4卡无卡免费视频| 亚洲一区电影在线观看| 国产资源免费观看| ssswww日本免费网站片| 亚洲国产精品一区| 成年女人喷潮毛片免费播放| 老司机午夜免费视频| 亚洲日本va中文字幕久久| 99在线在线视频免费视频观看| 亚洲一卡2卡3卡4卡国产网站| 日本免费电影一区| 97在线免费视频| 亚洲国产综合在线| 亚洲国产精品不卡毛片a在线| 七色永久性tv网站免费看| 亚洲日韩国产一区二区三区在线 | 色爽黄1000部免费软件下载| 国产l精品国产亚洲区在线观看| 思思re热免费精品视频66|