一个很大的数字求平方的的问题!!

liu_liyang 2009-05-26 10:52:35
这个题就是,,,求一个一千多位的正整数大数字的平方根,,并且输出整数部分!!!
是一千多位的数字,,,不是千位数!!!
int只有32位double只有64位,,放不下这个大数字,这道题 怎么做?
我问了好多人,都没有明确的答案,,,所以 、、
我求这个题的全部代码!!!
...全文
547 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
AslenG 2012-03-29
  • 打赏
  • 举报
回复
问了很多人?看来都是高手啊-_-! BigDecimal对象都不知吗。
zloveg 2009-05-26
  • 打赏
  • 举报
回复
不好意思 lz 题目打错了 我没看清楚 是平方根
zloveg 2009-05-26
  • 打赏
  • 举报
回复
晕死 自己不知道看下 想下? ls的已经给出答案了 bigdecimal 可以表示无限长的 数字 原理是字符串形式 通过进位乘法来做的
liu_liyang 2009-05-26
  • 打赏
  • 举报
回复
这个题就这么难做吗?
现在还没出来答案呀。。。
懂的人说下啊 !!!
cuijie_cn 2009-05-26
  • 打赏
  • 举报
回复
BigDecimal支持超过64位的大数字
calibure 2009-05-26
  • 打赏
  • 举报
回复
楼上的,你没看人家的要求把,人家要求平方根,不是平方。BigDecimal不能做平方根。
zhangkai_java 2009-05-26
  • 打赏
  • 举报
回复
你建个类,把上面的代码一执行不就完了,已经是完整的了
calibure 2009-05-26
  • 打赏
  • 举报
回复
一千多位的数做运行,太夸张了吧。如果是加减乘除还好说,好要求平方根... 我也想知道有什么方法~~ 期待高手
liu_liyang 2009-05-26
  • 打赏
  • 举报
回复
我想要全部的代码,,,我想了一个星期了,但是没有想出来。。所以,,想要全部的代码。。。。你这说的我没看懂······
谢谢!!!
zhangkai_java 2009-05-26
  • 打赏
  • 举报
回复
你使用BigDecimal就行了
BigDecimal bg1 = new BigDecimal("11111111111111111111111111111111") ;
BigDecimal bg2 = new BigDecimal("3333333333333333333333333333333") ;
System.out.println(bg1.multiply(bg2)) ;
x-teamer团队 2009-05-26
  • 打赏
  • 举报
回复
我已经帮你实现了,

这边贴代码受限制了. 所以只能下载, Sqrt类就是算法

http://download.csdn.net/source/1352494
ChDw 2009-05-26
  • 打赏
  • 举报
回复
实在不行就折半查找啦

String str = "12345678901234567890";
BigInteger input = new BigInteger(str);
BigInteger max = input;
BigInteger min = BigInteger.ONE;
BigInteger two = new BigInteger("2");

BigInteger avg = BigInteger.ZERO;
BigInteger lastAvg = null;
while(!avg.equals(lastAvg)) {
lastAvg = avg;
avg = max.add(min).divide(two);
int res = avg.multiply(avg).compareTo(input);
if(res == 0)
break;
if(res > 0)
max = avg;
else
min = avg;
}
System.out.println(avg);
ayghwp11 2009-05-26
  • 打赏
  • 举报
回复
我完全搞错了,13楼的解法对的[Quote=引用 22 楼 ayghwp11 的回复:]
有没有可能用这种方法呢:
当一个数位有1000位,如1.............1,......中间代表有998位个1;
我直接截取前面的60位,即剩余的位数还有940位,也就是940个1,
我用Math.sqrt()方法求出前60位数(即1......1,....中间位58位)的平方根,然后直接就使用这个平方根和470个0(即剩余的940位除以2)连接起来,作为这个1000位数的平方根呢?
这个方法主要就是考虑到,那么大的位数,我取前面60位数作平方根和后面剩余位数/2连…
[/Quote]
liu_liyang 2009-05-26
  • 打赏
  • 举报
回复
算了,,这个题,我不做了,,,,很难想象这个题到底要怎么做。。。
等待老师的答案吧。·······
分也散了。。。
ayghwp11 2009-05-26
  • 打赏
  • 举报
回复
有没有可能用这种方法呢:
当一个数位有1000位,如1.............1,......中间代表有998位个1;
我直接截取前面的60位,即剩余的位数还有940位,也就是940个1,
我用Math.sqrt()方法求出前60位数(即1......1,....中间位58位)的平方根,然后直接就使用这个平方根和470个0(即剩余的940位除以2)连接起来,作为这个1000位数的平方根呢?
这个方法主要就是考虑到,那么大的位数,我取前面60位数作平方根和后面剩余位数/2连接起来的数作为这个大数的平方根近似相等于这个1000位数的准确的平方根,至于误差,当然对于这个1000位数来讲是很小的,当相对于我们平常所说的数却要大出470位的数的倍数。
zm_hs 2009-05-26
  • 打赏
  • 举报
回复
LZ是个SB,自己想都不想,一个劲的要别人给全部代码
liu_liyang 2009-05-26
  • 打赏
  • 举报
回复
不 是吧。。
难道让我手动写进去1000多个数字???
你说能不能找到其他方法来实现呢?
比如说随即出来那个大的一个数。。然后再装进String num里呀 !
seaman_xh 2009-05-26
  • 打赏
  • 举报
回复
你要算那个数,还用我的测试数据结果当然是1000


String num = "1000000";
改成
String num = "456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456";
liu_liyang 2009-05-26
  • 打赏
  • 举报
回复
是一个1000位的数字。。。。
不是1000
就像这个456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456456789456789456546545456
等等,这么大的数字开方后的整数部分。。
要不别人也能写出来吧。。。。
x-teamer团队 2009-05-26
  • 打赏
  • 举报
回复
http://download.csdn.net/source/1352494

最近在考试, 实现了大数的加减乘除, 可以参考一下,


有问题发个mail.

基本思路是, 都转化为String, 按照手算的方式实现,


比如6789手算开平方,

由于长度为4, 开平方可以从100开始, 找到最大的80, 再从81算起,算到89,中间找到最大就返回,


和windows计算器比较了一下, 没有问题, 小数点后的数字舍弃了.
加载更多回复(7)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧