C#實現10進制轉2進制

這幾天在複習計算機原理,看到二進制突然想到二進制轉10進制的公式,而後轉念一想10進制轉二進制的公式好像沒印象,那索性本身寫出來。函數

結果學渣的我發現,並不能寫出來!什麼數列,對數,xx函數忘得一乾二淨,並且須要有須要判斷的地方,因而崩潰了,之前代數題並沒寫過條件啊~測試

索性用C#代碼搞出來(雖然在C#裏有方法直接轉換)spa

 

 

二進制值 10進制值 公式
0 0  0
1 1
10 2 f(2)=10^1 =10
11 3 f(3):比 log₂3最小的整數位1,記錄10^1,並3-(2^1)=1,f(1)=1,則最終結果爲10^1+f(1)=10+1=11
100 4  f(4): log₂4=2,整數,直接返回10^2
101 5  f(5):比 log₂5最小的整數位2,記錄10^2,並5-(2^2)=1,f(1)=1,則最終結果爲10^2+f(1)=100+1=101
110 6  f(6):比 log₂6最小的整數位2,記錄10^2,並6-(2^2)=2,f(2)=10,則最終結果爲10^2+f(2)=100+10=110
111 7  ………………
1000 8  ………………
1001 9  ………………
1010 10  ………………
1011 11  ………………
1100 12  ………………
1101 13  ………………
1110 14  ………………
1111 15  f(15):比 log₂15最小的整數位3,記錄10^3,並15-(2^3)=7,f(7)=111,則最終結果爲10^3+f(7)=1000+111=1111
10000 16  f(16):比 log₂6最小的整數位4,整數,直接返回10^4

公式是這樣子的。 假如求10進制數n的二進制,先求以2爲底的n的對數log₂N,判斷log₂N是否爲爲整數,若是爲整數直接返回10^log₂N,不然求出比log₂N最小的整數t(如1.001取1,2.02取2,3.9取3)。求出並記錄10^t,而後將n減去2^t並重復執行以上步驟,返回的值與記錄的10^t相加。code

以上咱們設這個函數爲f(n);orm

貼代碼,無疑,用了遞歸~blog

  private double DecimalToBinarySystem(int decimalNumber)
        {
            double standard = 0;
            if (decimalNumber==0)
            {
                return 00;
            }
            if (decimalNumber==1)
            {
                return 01;
            }
            var doubleValue = (double) decimalNumber;
            var logarithm = Math.Log(doubleValue,2 );
            var logFormat = Math.Truncate(logarithm);
                        var baseNum = Math.Pow(10, logFormat);
            if (logarithm.Equals(logFormat))
            {
                return baseNum;
            }

            var leftNumber = doubleValue - Math.Pow(2, logFormat);
            return baseNum + DecimalToBinarySystem((int)leftNumber);


        }

僅測試過大於等於0的整數,負數和小數未測試。遞歸

只是樂於思考一下,拋磚引玉歡迎指正ci

相關文章
相關標籤/搜索