Algorithm 版 (精华区)
发信人: zjliu (fly), 信区: Algorithm
标 题: 高精度乘法和阶乘
发信站: 哈工大紫丁香 (Sat Jul 6 18:29:19 2002) , 转信
发信人: fdchosen (紫星), 信区: Algorithm
标 题: 高精度乘法和阶乘
发信站: 日月光华 (Thu Jul 4 19:38:47 2002)
高精度乘法和阶乘
------------------------------------------------------------------------------
--
一、高精度乘法基本思想和加法一样。其基本流程如下:
①读入被乘数s1,乘数s2
②把s1、s2分成4位一段,转成数值存在数组a,b中;记下a,b的长度k1,k2;
③i赋为b中的最低位;
④从b中取出第i位与a相乘,累加到另一数组c中;(注意:累加时错开的位数应是多少位
?)
⑤i:=i-1;检测i值:小于k2则转⑥,否则转④
⑥打印结果
例:程序下载
program chengfa;
const n=100;
type ar=array [1..n] of integer;
var a,b:ar; k1,k2,k:integer;
c:array [1..200] of integer;
s1,s2:string;
procedure fenge(s:string;var d:ar; var kk:integer);
var ss:string;
i,code:integer;
begin
i:=length(s);
kk:=n;
repeat
ss:=copy(s,i-3,4);
val(ss,d[kk],code);
kk:=kk-1;
s:=copy(s,1,i-4);
i:=i-4;
until i<0;
kk:=kk+1;
end;
procedure daying;
var i:integer;
begin
write(c[k]);
for i:=k+1 to 2*n do begin
if c[i]<1000 then write('0');
if c[i]<100 then write('0');
if c[i]<10 then write('0');
write(c[i]);
end;
writeln;
end;
begin
init;
jisuan;
daying;
end.
二、求N!当N稍微大一点时结果就很大了(如n=10时N!=3628800;n=20时N!=24329020081
76640000);因此,求阶乘通常都要用到高精度算法。基本过程和乘法一样,只是多了控制
乘法次数的一层循环。
--
※ 来源:.日月光华 http://bbs.fudan.edu.cn [FROM: 10.11.12.201]
--
※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 202.118.229.86]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.782毫秒