大数加法

 

今天一个朋友豌豆荚面试的唯一一个算法题:大数加法,写程序或者说思路。

下面的一些理解来自网络。

 

1.大数,指的是超过int 32位的数。4个字节,最高位是符号位,1用来表负数。剩下31个bit来表示数值,1000...00(31个0)~11111...11(32个1),不是2的31次方多个变化吗?每一个变化用来表示一个负数。
至于每一种变化表示那个负数,那你还要学习一下原码、反码和补码的知识。

 

2.我记得Integer类有两个静态常量
1.MAX_VALUE值为 2的31次方-1 的常量,它表示 int 类型能够表示的最大值。
2.MIN_VALUE 
 值为 -2的31次方 的常量,它表示 int 类型能够表示的最小值。

 

3.java中int是32位 --> 数值范围长度是2的32次方
--> java中没有unsign数值的概念,因此正数和负数各占一半
--> 负数:[-2的31次方, 0)
    正数:[0, 2的31次方-1]   将0作为正数处理

 

4.负数的值是这样得出的:JAVA中int是4个字节,
数0 = 00...0000(共32个0)
数-1= 11...1111(共32个1)
数-2= 11...1110(共31个1,最后一个是0)
数-3= 11...1101
数-4= 11...1100(共30个1,最后两个是0)
这样排下去。。。
最后一个负数[最小]是-2的31次方=100..00(一个1,最后31个是0)

 

5.我个人觉得是否和下面的2个类有关系,可以看看。

  BigInteger   bi ;
  BigDecimal   bd ;

 

 

延伸:大数阶乘的实现思路及代码

http://blog.csdn.net/niushuai666/article/details/6637250

 

 

参考链接:

 http://blog.csdn.net/niushuai666/article/details/6637263

 http://www.cnblogs.com/zhangchaoyang/articles/2727225.html

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值