• <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

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

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

             

            這種題也是一道經(jīng)典的面試題,主要考察進制轉(zhuǎn)換細想,Coding質(zhì)量等。

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

            如下是C的詳細的實現(xiàn)方法

             

            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;
              
                //這是一個考察地方,是否能用最少乘法次數(shù)。
                while (*mNum != '\0')
                    i = i*m + *mNum++ - '0';
                  
                //輾轉(zhuǎn)取余
                while (i) {
                    *p++ = i % n + '0';
                    i /= n;
                }
                *p-- = '\0';
              
                //逆置余數(shù)序列
                while (p > nNum) {
                    c = *p;
                    *p-- = *nNum;
                    *nNum++ = c;
                }
            }

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

             

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

             

            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;
              
            /**
             * 功能:將一個數(shù)從M進制轉(zhuǎn)換成N進制
             * MValue:M進制數(shù)的字符串表示方法
             * Shang:保存中間運算結(jié)果
             * 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;
                }
            }

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

            久久久久久久久66精品片| 97精品国产97久久久久久免费| 97热久久免费频精品99| 久久精品国产免费观看| 国产精品99久久久久久宅男小说| 久久乐国产精品亚洲综合| 国产精品免费久久久久久久久| 7国产欧美日韩综合天堂中文久久久久 | 三上悠亚久久精品| 亚洲AV无码久久| 久久精品国产亚洲av影院| 久久亚洲私人国产精品vA | 欧美噜噜久久久XXX| 亚洲精品美女久久777777| 日产精品久久久久久久| 国产∨亚洲V天堂无码久久久| 国产69精品久久久久777| 日本免费久久久久久久网站| 99久久亚洲综合精品网站| 久久久久国产一区二区| 久久强奷乱码老熟女网站 | 久久国产乱子伦精品免费午夜| 久久综合成人网| 久久夜色精品国产网站| 伊人久久精品线影院| 久久综合九色综合久99| 无码久久精品国产亚洲Av影片 | 久久亚洲精品人成综合网| 久久国产精品-久久精品| 国产亚洲成人久久| 五月丁香综合激情六月久久| 人人狠狠综合久久亚洲88| 久久久久久综合网天天| 久久青草国产精品一区| 中文字幕精品无码久久久久久3D日动漫 | 久久精品国产亚洲麻豆| 一级a性色生活片久久无| 国产韩国精品一区二区三区久久| 国产一区二区精品久久凹凸| 人妻精品久久无码专区精东影业| 久久丝袜精品中文字幕|