切换到宽版
  • 6324阅读
  • 4回复

算法 [复制链接]

上一主题 下一主题
离线clwxzh57
 
只看楼主 正序阅读 0 发表于: 2007-07-02
一、高精度乘法基本思想和加法一样。其基本流程如下:

①读入被乘数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<1000 then write('0');
if c<100 then write('0');
if c<10 then write('0');
write(c);
end;
writeln;
end;
begin
init;
jisuan;
daying;
end.
九连环program jlh(input,output);
VAR
  k,s,i,j,total:integer;

PROCEDURE move(n:integer;VAR s:integer);
  VAR
    j,i:integer;
  BEGIN
  IF (n=1) OR (n=2)
    THEN s:=s+1
    ELSE BEGIN
        FOR i:=1 TO n-2 DO
          move(i,s);
          s:=s+1;
        FOR j:=1 TO n-2 DO
          move(j,s)
      END
  END;

BEGIN
  k:=0;
  write('input total=');
  read(total);
  move(total,k);
  writeln;
  writeln('s=',k)
END.
离线luyiqu
只看该作者 4 发表于: 2007-08-24
integer要改longint 否则 999*999这样的不出错才怪 integer 正数只到3万多,longint有21亿多
离线clwxzh57
只看该作者 3 发表于: 2007-07-03
多来几个!
离线clwxzh57
只看该作者 2 发表于: 2007-07-02
就一个?
离线haiwei
只看该作者 1 发表于: 2007-07-02
......
haiwei
http://user.qzone.qq.com/317048955
快速回复
限100 字节
 
上一个 下一个