两个大数相乘的问题(30分)

  • 主题发起人 主题发起人 happy2000wf
  • 开始时间 开始时间
H

happy2000wf

Unregistered / Unconfirmed
GUEST, unregistred user!
假设有两个很大的整数相乘,s1 s2(m位和n位的,用字符串表示)
我把它分成两个部分
1 s2的每位数和s1先相乘,将结果保存在一个字符串里
2 将所得到的各个字符串移位相加,就和小学学的乘法一样
得到最后的结果
第一步我已经实现,但第二步相加的问题我怎么也想不出一个好办法
各位帮帮忙,我就这点分了
//数与字符串乘
function nString(n: integer;
s: string): string;
var
m,jw,i,ms: integer;
rs: string;
begin
m:=Length(s);
SetLength(rs,m+1);
jw:=0;
for i:=1 to mdo
begin
ms:=n*StrToInt(s[m+1-i]);
rs[m+2-i]:=Chr(Ord('0')+jw+(ms mod 10));
jw:=ms div 10;
end;
rs[1]:=Chr(Ord('0')+jw);
result:=rs;
end;
//字符串与字符串乘
//有很大的问题,我不知道怎样写
function LongMulti(s1,s2: string): string;
var
m,n,i,j: integer;
rn: array of integer;
rs: String;
nrs: array of String;
begin
m:=Length(s1);
n:=Length(s2);
SetLength(nrs,n);
Setlength(rn,m+n);
Setlength(rs,m+n);
for i:=0 to n-1do
begin
nrs:=nString(StrToInt(s2[n-i]),s1);
end;
for i:=1 to mdo
for j:=1 to ndo
rn[m+n+1-i]:=rn[m+n+1-i]+Ord(nrs[j])-Ord('0');
for i:=1 to m+ndo
rs:=Chr(ord('0')+rn);
result:=rs;
end;
 
关于大数计算,你可以下载RSA加密算法的大数计算Pas,相信一定会对你有帮助的。
你可以到www.playicq.com下载RSA加密源码。
 
应该从低位到高位一位一位相乘
首先是个位数跟个位数相乘,首先得到个位数,然后是s1的十位数乘以s2的个位数+s2的十位数乘以s1的个位数+刚才两个个位数相乘后的进位数,按这种方法一直下去直到最高位
 
的确可行,谢谢
 
后退
顶部