• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 200, comments - 8, trackbacks - 0, articles - 0

            轉自:http://www.cnblogs.com/pkuoliver/archive/2010/10/27/Convert-m-number-to-n-number.html

            園子里有很多深藏不漏的高手,在這里聊這種基本問題是有點小兒科。不過本人只是想分享下自己的新的,代碼,算法有不足之處,還請大家指正,共同進步。

             

            這種題也是一道經典的面試題,主要考察進制轉換細想,Coding質量等。

            當我們把十進制轉成二進制的時候,我們通過輾轉相除,取余,逆置余數序列的過程得到新的進制的數。因此我們可以借助這種思想把M進制轉成N進制的數。

            如下是C的詳細的實現方法

             

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            void m2n(int m, char* mNum, int n, char* nNum) 
            {
                int i = 0;
                char c, *p = nNum;
              
                //這是一個考察地方,是否能用最少乘法次數。
                while (*mNum != '\0')
                    i = i*m + *mNum++ - '0';
                  
                //輾轉取余
                while (i) {
                    *p++ = i % n + '0';
                    i /= n;
                }
                *p-- = '\0';
              
                //逆置余數序列
                while (p > nNum) {
                    c = *p;
                    *p-- = *nNum;
                    *nNum++ = c;
                }
            }

            觀察上面的代碼,存在著眾多的不足。例如,要對輸入參數做檢查,數值的大小收到int值最大值的限制等。不過好在一點,該算法的時間復雜度是O(n)的。

             

            我們霹靂無敵的趙大叔又提供了一種用Java實現的通用的進制轉換方法,即使Windows的計算器也轉不了的大數,這個算法也可以轉。算和上面的算法相比,他的基本思想不變,還是輾轉除,但是用了字符串做大數相除,很不錯的創新點,贊一個。代碼如下:

             

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            59
            60
            61
            62
            63
            64
            65
            66
            67
            68
            69
            package test;
              
            /**
             * 功能:將一個數從M進制轉換成N進制
             * MValue:M進制數的字符串表示方法
             * Shang:保存中間運算結果
             * M:M進制
             * N:N進制
             */
            public class M2N {
                // 在這里對輸入賦值
                public static String MValue = "1231412423534674574757";
                public static String Shang = null;
                public static int M = 10;
                public static int N = 8;
              
                public static void main(String[] args) {
                    String nValue = "";
                    Shang = MValue;
                    while(Shang.length() > 0) {
                        nValue = qiuyu(Shang) + nValue;
                    }
                    System.out.println(nValue);
                }
              
                /**
                 * 功能:對給定的M進制字符串對n求余。
                 
                 * @param MTempValue
                 * @param m
                 * @param n
                 * @return
                 */
                public static String qiuyu(String MTempValue) {
                    Shang = "";
                    int temp = 0;
                    while (MTempValue.length() > 0) {
                        int t = getIntFromStr(MTempValue.substring(0, 1));
                        MTempValue = MTempValue.substring(1);
                        temp = temp * M + t;
                        Shang += getStrFromInt(temp / N);
                        temp = temp % N;
                    }
                    while(Shang.length() > 0 && Shang.charAt(0) == '0'){
                        Shang = Shang.substring(1);
                    }
                    return getStrFromInt(temp);
                }
              
                public static int getIntFromStr(String str){
                    return str.charAt(0) <= '9' && str.charAt(0) >= '0'
                        str.charAt(0) - '0' : str.charAt(0) - 'a' + 10;
                }
              
                public static String getStrFromInt(int value){
                    String result = null;
                    if(value>=0 && value<=9)
                        result = String.valueOf((char)('0' + value));
                    else if(vlaue > 9 && value <36)
                    {
                        result = String.valueOf((char)('a' + value - 10));
                    }
                    else
                    {
                        result = "-1";// 出錯誤了
                    }
                    return result;
                }
            }

            趙大叔的算法好了不少,除了參數檢查,大小寫之外都很好。值得我們借鑒。 

            久久久精品国产亚洲成人满18免费网站| 久久大香香蕉国产| 久久91这里精品国产2020| 久久精品无码一区二区日韩AV| 久久久久无码精品| 精品一二三区久久aaa片| 国产精品岛国久久久久| 亚洲欧美一级久久精品| 狠狠色丁香久久综合婷婷| 色婷婷久久久SWAG精品| 99久久婷婷国产综合亚洲| 亚洲色婷婷综合久久| 久久精品国产亚洲av瑜伽| 99久久精品免费看国产一区二区三区| 久久99国产亚洲高清观看首页| 久久久免费观成人影院| 精品久久久久久99人妻| 欧美黑人又粗又大久久久| 久久精品人人做人人爽电影| 青青青伊人色综合久久| 久久发布国产伦子伦精品 | 久久久国产亚洲精品| 国内精品久久久久久久久电影网 | 国内精品人妻无码久久久影院导航 | 久久男人Av资源网站无码软件| 午夜视频久久久久一区| 久久91精品国产91久久小草| 伊人久久久AV老熟妇色| 亚洲国产天堂久久综合| 国内精品久久久久国产盗摄| 久久亚洲高清观看| 99久久国产免费福利| 国产亚洲色婷婷久久99精品91| 久久99久久99精品免视看动漫| 亚洲AV乱码久久精品蜜桃| 国产亚洲欧美精品久久久 | 久久免费精品一区二区| 久久国产亚洲精品麻豆| 久久精品国产一区| 久久91精品国产91久久小草 | 欧美国产成人久久精品|