zoukankan      html  css  js  c++  java
  • C#实现10进制转2进制

    这几天在复习计算机原理,看到二进制忽然想到二进制转10进制的公式,然后转念一想10进制转二进制的公式好像没印象,那索性自己写出来。

    结果学渣的我发现,并不能写出来!什么数列,对数,xx函数忘得一干二净,而且需要有需要判断的地方,于是崩溃了,以前代数题并没写过条件啊~

    索性用C#代码搞出来(虽然在C#里有方法直接转换)

    二进制值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相加。

    以上我们设这个函数为f(n);

    贴代码,无疑,用了递归~

      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的整数,负数和小数未测试。

    只是乐于思考一下,抛砖引玉欢迎指正

  • 相关阅读:
    【leetcode】Climbing Stairs (easy)
    【leetcode】Best Time to Buy and Sell 3 (hard) 自己做出来了 但别人的更好
    【leetcode】Best Time to Buy and Sell 2(too easy)
    【leetcode】Best Time to Buy and Sell (easy)
    【leetcode】Single Number II (medium) ★ 自己没做出来....
    【leetcode】Single Number (Medium) ☆
    【leetcode】Valid Sudoku (easy)
    【leetcode】Two Sum (easy)
    Oracle-11-主键约束
    Codeforces444A_DZY Loves Physics
  • 原文地址:https://www.cnblogs.com/MLGB/p/6895426.html
Copyright © 2011-2022 走看看