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;
我把它分成两个部分
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;