A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© noiary 高级黑马   /  2014-9-4 16:43  /  1096 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 noiary 于 2014-9-4 16:45 编辑
  1. /*
  2. 复习十进制转换二进制,发现了一些规律.萌生了一个想法:

  3. 十进制  二进制
  4.         1                1
  5.         2                10
  6.         3                11
  7.         4                10
  8.         5                101
  9.         6                100
  10.         7                111
  11.         8                100
  12. 规律:
  13.         偶数十进制对应的二进制都是0结尾
  14.         奇数十进制对应的二进制都是1结尾
  15.         
  16.         十进制x转换成二进制y

  17.         偶数:(二进制)(x/2) * 10 = y
  18.                 比如十进制8/2 = 4 4的二进制10    10*10 = 100
  19.         奇数 在上面公式计算结果后面+1,也就是把位数0改成1
  20.                 如十进制7/2=3 3的二进制11     11*10 = 110 +1 = 111
  21.                
  22.                
  23. 下面我们随便找来个数字测试一下: 163
  24.                         163        10100011
  25.         
  26.         163/2 = 81        1010001

  27.         81/2 = 40        101000

  28.         40/2 = 20        10100

  29.         20/2 = 10        1010

  30.         10/2 = 5        101

  31.         5/2 = 2                10

  32.         2的二进制是10
  33.         5的二进制是10*10+1 = 101
  34.         10的二进制是101*10 = 1010
  35.         20的二进制是1010*2 = 10100
  36.         40的二进制是10100*10 = 101000
  37.         81的二进制是101000*10+1 = 1010001
  38.         163的二进制是101001*10+1 = 10100011

  39.                 根据计算机calc计算这个数字是正确的.
  40.                
  41.         下面来写一个用这种方法转换的程序.

  42. */
复制代码





















没写出来......{:3_59:}{:3_65:}

哪位有闲工夫的好汉侠女,来一起研究~

3 个回复

倒序浏览
这个,怎么说呢,你仔细想一下2进制的笔算过程,这个真不是啥规律,一个数除以2的余数必然不是0就是1,所谓偶数不就是可以被2整除,也就是余数为0的数,奇数就是余数为1的数吗?你用int型数据做除法运算,自然是舍弃小数位了,也就是舍弃余数了。你这算法实际上也是拿一个数不断除以2,然后看余数,跟笔算过程是一样的,只不过你的算法是每做一次除法就把得数变成2进制,反而更麻烦了。
回复 使用道具 举报
李天富 发表于 2014-9-4 17:53
这个,怎么说呢,你仔细想一下2进制的笔算过程,这个真不是啥规律,一个数除以2的余数必然不是0就是1,所谓 ...

嗯嗯  后来琢磨来琢磨去,  其实套路还是不断除以二.   


哎 好二~!
回复 使用道具 举报
如果不考虑栈溢出  这个很方便
public class Test_2 {
        static void main(String[] args) {
                String   s=  parse(16);
                System.out.print(s);
        }
        public static String  parse(int i) {
                if(i>0){
                        return ""+parse(i/2)+i%2;
                }else{
                        return "";
                }
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马