这几天在复习计算机原理,看到二进制忽然想到二进制转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 = ;
if (decimalNumber==)
{
return ;
}
if (decimalNumber==)
{
return ;
}
var doubleValue = (double) decimalNumber;
var logarithm = Math.Log(doubleValue, );
var logFormat = Math.Truncate(logarithm);
var baseNum = Math.Pow(, logFormat);
if (logarithm.Equals(logFormat))
{
return baseNum;
} var leftNumber = doubleValue - Math.Pow(, logFormat);
return baseNum + DecimalToBinarySystem((int)leftNumber); }

仅测试过大于等于0的整数,负数和小数未测试。

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

C#实现10进制转2进制的更多相关文章

  1. C++ 中 int 转string, 以及10进制转2进制

    感谢:http://blog.csdn.net/xiaofei2010/article/details/7434737 以及:http://www.cnblogs.com/nzbbody/p/3504 ...

  2. js用8421码实现10进制转2进制

    今天早上突然心血来潮决定用 ''和js来撸一个进制转换.(纯属心血来潮,有兴趣的可以看看.) 我们知道,通过8421码.可以快速的得到一个10进制的2进制.如下图: 如上图所示:我们将10进制的 '1 ...

  3. python中2进制、10进制、16进制等之间的转换

    10转2: bin(8) # '0b1000' 2转10: int( 10转16: hex(15) # '0xf' 16转10: int( 2进制和16进制中间通过转10进制可以相互转换 from b ...

  4. javascript 10进制和64进制的转换

    原文:javascript 10进制和64进制的转换 function string10to64(number) { var chars = '0123456789abcdefghigklmnopqr ...

  5. c# 关于10进制和16进制转换以及显示

    直接举例说明: int i = 15;//一个10进制数 string txt = Convert.ToString(i,16);//将上面10进制以16进制形式显示为f string s = &qu ...

  6. python3 第十九章 - 写一个10进制转任意进制的函数

    我们先回忆下之前所学的进制转换的知识(详见:第十章),10进制转其它进制的方法是: 整数部分,除基取余,逆序排列 小数部分,乘基取整,顺序排列 负数,按绝对值处理 好,假设我们需要转化的数都是正整数, ...

  7. 10进制 VS 2进制

    10进制 VS 2进制 时间限制: 1 Sec  内存限制: 32 MB 题目描述 样例输出 623 #include<stdio.h> #include<string.h> ...

  8. 题目1208:10进制 VS 2进制(进制转换以及大数保存问题)

    题目链接:http://ac.jobdu.com/problem.php?pid=1208 详细链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  9. 【九度OJ】题目1208:10进制 VS 2进制 解题报告

    [九度OJ]题目1208:10进制 VS 2进制 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1208 题目描述: 对于一 ...

  10. golang中字符串、数值、2进制、8进制、16进制、10进制、日期和字符串之间的转换

    package main import ( "fmt" "reflect" "strconv" "time" ) fun ...

随机推荐

  1. 日期控件传到后台异常。日期数据格式是 Date 还是 String?

    问题:日期控件的时间,传到Controller层直接异常. 前台日期格式:YYYY/MM/DD,后台Java定义的时间类型:Date. 解决: 方法一:原因是Controller层的参数类型定义为 D ...

  2. flex布局时,vertical-align:middle无效

    flex布局,子元素内部vertical-align=middle无效,对文字的容器 display: flex; align-items: center;

  3. vue组件库element-ui 的Table内容显示不更新

    一.问题原因: 因为数组直接赋值不能被 Object.defineProperty 检测到.  二.解决方法 所以应该要使用this.$set(‘对象名’,要修改的属性名,属性值),这样新添加的属性值 ...

  4. 数据库学习其一 oracle11g数据泵导入导出

    一.检查环境一致性 需检查数据库客户端与服务端字符编码,以避免后续各种各样的问题 查询服务端编码 注意最好用sqlplus查询,用plsql有时候会出现查询不一致问题,如下图同一个语句在plsql和s ...

  5. Scala 孤立对象和单例对象方法体的用法和例子

    [学习笔记] 1  以object关键字修饰一个类名,这种语法叫做孤立对象,这个对象是单例的. 相当于将单例类和单例对象同时定义.相当于java中的单例,即在内存中只会存在一个Test3实例.创建一个 ...

  6. 剑指offer12:求解double类型的浮点数base和int类型的整数exponent的次方。 保证base和exponent不同时为0

    1. 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.保证base和exponent不同时为0. 2. 思路和方法 分析: 由于 ...

  7. QT 打包exe

    QT打包主要方法: 1.把无措的代码进行Release编译 2.在运行完后,找到运行后生成的目录,以下是我的文件,名为result,运行类型有两种,一种是Debug,另一种是Release,我们需要的 ...

  8. php商城秒杀活动

    今天在网上看到一篇思路+代码的商城秒杀实例,我觉得非常不错,借鉴一下分享给大家: 一.前言 双十一刚过不久,大家都知道在天猫.京东.苏宁等等电商网站上有很多秒杀活动,例如在某一个时刻抢购一个原价199 ...

  9. redis集群搭建及一些问题

    redis 1.简化版redis (本套Redis集群为简化版安装部署,只需解压至普通用户家目录下或者任意目录,解压后修改脚本,执行脚本后即可使用.) 注意,此版本需要在redis配置文件中添加 pr ...

  10. webpack打包时删除console.log,和debugger

    开发过程中我们不可避免的需要console.log调试,然而在上线时如果不删除这些console.log可能会造成内存泄漏,因为console.log出来的变量是不会被GC的,webpack给我们提供 ...