ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle开发 » 有兴趣的来看下

标题: 有兴趣的来看下
离线 双629



精华贴数 0
个人空间 0
技术积分 136 (13324)
社区积分 5 (16717)
注册日期 2008-8-1
论坛徽章:0
      
      

发表于 2008-9-18 12:57 
还是不明白啊

还是不明白啊。


只看该作者    顶部
离线 gong_max
初级会员



精华贴数 0
个人空间 0
技术积分 369 (5372)
社区积分 0 (1272267)
注册日期 2007-6-14
论坛徽章:0
      
      

发表于 2008-9-18 17:16 
把循环变量改成j(在楼主笔误吧)
declare
i number(4);
j number(20);
begin
for j in 1..1999 loop
    i:=i*(i+1);
end loop;dbms_output.put_line(i);
end;
这样肯定会溢出,j到6已经是10650056950806这个数字了


只看该作者    顶部
在线/呼叫 newkid
资深新手
老程序员


来自 银河系
精华贴数 2
个人空间 0
技术积分 2756 (579)
社区积分 0 (121048)
注册日期 2004-6-26
论坛徽章:5
生肖徽章2007版:马生肖徽章2007版:鸡2008北京奥运纪念徽章:垒球2008北京奥运纪念徽章:羽毛球  
      

发表于 2008-9-18 22:15 


QUOTE:
原帖由 双629 于 2008-9-18 09:05 发表
楼上能说明白点怎么拼接吗?刚开始学,很多不懂。谢谢了

多个number拼接表示一个大数字:

用number数组对大数分段

例子及算法:
比方说有 87654321*12345678,
用三个数组:
a(1)=4321
a(2)=8765
b(1)=5678
b(2)=1234
数组c存放结果
(这里取四位一截,实际应用中可以用10位也没关系)

  prod:=b(1)*a(1) = 24534638
  c(1):=mod(prod,10000)=4638
  roundup := trunc(prod/10000)=2453
  
  prod:=b(1)*a(2)+roundup = 49770123
  c(2):=mod(prod,10000)=0123
  roundup := trunc(prod/10000)=4977
  
  c(3):=roundup=4977
  
  这样你已经算完了87654321*5678=97701234638
  
  下一步把数组a*10000
  a(3):=a(2)=8765
  a(2):=a(1)=4321
  a(1)=0

  同样作数组a和b(2)的乘法,加到数组c中

这是个例子,算法当然是用循环实现。就是把大数乘法变成多个小数的乘法加法。


__________________
只看该作者    顶部
离线 wdollar



精华贴数 0
个人空间 0
技术积分 74 (21192)
社区积分 0 (1725366)
注册日期 2008-3-9
论坛徽章:0
      
      

发表于 2008-9-19 00:26 
晕,怎么就没有人告诉楼主6楼的算法流程才是所谓的递归呢……
由于各种的原因,在相当多的高级语言中递归的层次都不能很深,而且随着递归层次的加深伴随所用语言自身的特性会产生各种各样的问题(尤其是资源开销上),所以多数情况下递归并不是一种太好的方法。

不明白楼主到底要算什么,2,6,42,1806,3263442,10650056950806......很奇怪的数列,而且还要算到1999,可否透露一下用途?这么大的数字用现在的硬盘都存储不下来吧……


只看该作者    顶部
在线/呼叫 newkid
资深新手
老程序员


来自 银河系
精华贴数 2
个人空间 0
技术积分 2756 (579)
社区积分 0 (121048)
注册日期 2004-6-26
论坛徽章:5
生肖徽章2007版:马生肖徽章2007版:鸡2008北京奥运纪念徽章:垒球2008北京奥运纪念徽章:羽毛球  
      

发表于 2008-9-19 02:03 
楼主这个算法定义上是递归的,但既然用循环也很简单明了,就用不着递归了。

关于大数字运算还可看看版主大作:
http://yangtingkun.itpub.net/post/468/469241

他更狠,19位分一截(因为NUMBER支持38位,两个19位的乘积可以放得下),连小数也实现了。他用了递归使得代码很简洁。


__________________
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问