E ewind Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-22 #1 请问如果想算10000的阶乘,结果要用什么数据类型啊?LongWord肯定是不够的了。 Windows的计算器的计算结果为 2.846E+35659.
B bluepeach Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-22 #6 随便找本书,里面一般都有讲如何用数组计算两个大数的乘法。照猫画虎即可。
E ewind Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-28 #8 我找了几本书,没找到,哪位大虾有空帮我找找,贴给我吧,谢谢
H hhzh426 Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-13 #13 改成浮点数运算,每个数都除以10000(用x,y分别表示底和幂) x:real; y:integer; x:=1.0; y:=0; for i:=10000do wnto 1do begin x:=x*i/10000.0 y:=y+4; j:=0; while x<1do begin x:=x*10.0; j:=j+1; end; y:=y-j; end; win2000+delphi5+pIII500+64M运行不超过1秒。
改成浮点数运算,每个数都除以10000(用x,y分别表示底和幂) x:real; y:integer; x:=1.0; y:=0; for i:=10000do wnto 1do begin x:=x*i/10000.0 y:=y+4; j:=0; while x<1do begin x:=x*10.0; j:=j+1; end; y:=y-j; end; win2000+delphi5+pIII500+64M运行不超过1秒。
I iie Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-15 #14 开一个数组,元素个数大于结果的有效位数,用BCD码存储,按位计算; hhzh426的办法看起来很简单,可是没有考虑截断误差,那几乎是用对数计算了, 原理就像老早用的计算尺,精度要受影响的。
C citybit Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-17 #15 不知道你想知道什么样的结果 1.如果想知道10000阶乘的每一位,那么只有用数组,采用高精度的算法来计算 2.如果只想知道10000 阶乘的位数那就很简单了,log1+log2+...+log10000 3.如果想知道10000阶乘的最末几位数,用循环做乘法,每一次计算的结果只用 保留最末的N位数,N的计算是和10000相关的. 总之,具体问题具体解决
不知道你想知道什么样的结果 1.如果想知道10000阶乘的每一位,那么只有用数组,采用高精度的算法来计算 2.如果只想知道10000 阶乘的位数那就很简单了,log1+log2+...+log10000 3.如果想知道10000阶乘的最末几位数,用循环做乘法,每一次计算的结果只用 保留最末的N位数,N的计算是和10000相关的. 总之,具体问题具体解决
E ewind Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-29 #16 我就想得到 n!=2.846E+35659 这样的结果
I iie Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-29 #17 那太容易了,写一个程序给你,只要6字节浮点就可以搞定 var f, f1, f2: real; i: integer; begin f := 0; for i := 1 to 10000do f := f + ln(i); f := f/ln(10); f1 := int(f); f2 := exp(frac(f) * ln(10)); end;
那太容易了,写一个程序给你,只要6字节浮点就可以搞定 var f, f1, f2: real; i: integer; begin f := 0; for i := 1 to 10000do f := f + ln(i); f := f/ln(10); f1 := int(f); f2 := exp(frac(f) * ln(10)); end;
E ewind Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-29 #18 to hhzh426: 谢谢您的帮助,可是您的程序好象是得不到10000!的幂 to iie: 谢谢,您的程序也得不到n!=2.846E+35659这样的结果
I iie Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-29 #19 你没仔细看吧,f1里是指数部分,结果是35659 f2里是底,结果是2.84626719733569。这还不行?你到底要什么?