-
乘數 s1、乘數 s2 讀入
將 S1 和 S2 分成 4 位段,並將它們轉換為陣列 A 和 B 中的數值; 記下 a、b、k1、k2 的長度;
i 被分配為 b 中的最低數字;
從 b 中取第 i 位並將其乘以 a,然後將其新增到另乙個陣列 c 中;
i:=i-1;檢測I值:小於k2後轉,否則轉
-
你不能複製其他答案嗎? 我要高精度,高精度,大哥。
-
var i,j,la,lb,len:integer;
s1,s2:string;
m:longint;
a,b,c:array[1..250] of integer;
beginreadln(s1); la:=length(s1);
for i:=1 to la do a[i]:=ord(s1[la-i+1])-48;
readln(s2); lb:=length(s2);
for i:=1 to lb do b[i]:=ord(s2[lb-i+1])-48;
for i:=1 to la do
for j:=1 to lb do
c[i+j-1]:=c[i+j-1]+a[i]*b[j];
len:=la+lb;
for i:=1 to len do
beginc[i+1]:=c[i+1]+c[i] div 10;
c[i]:=c[i] mod 10;
end;while c[len]=0 do dec(len);
m:=c[len];
while m>0 do begin c[len]:=m mod 10;m:=m div 10;inc(len);end;
for i:=len-1 downto 1 do write(c[i]);
end.應該很容易理解,說白了,就是模擬乘法。
-
請看以下片段:
輸入 a、b 陣列,a 有 n 位,b 有 m 位,輸出 c 陣列。
fillchar(c,sizeof(c),0) 被清除。
for i:=1 to n do
for j:=1 to m do
c[i+j-1]:=c[i+j-1]+a[i]*b[j];
這句話是關鍵,為什麼:
例如,123*456
考慮到數字 A 的第 i 位數字和數字 b 的第 j 位的乘法,你不妨取 2 表示 i,取 3 表示 j,那麼 a[i]=2 a[j]=4(按相反的順序取)是 20*400
你看到了嗎,這是乙個 4 位數字,但不一定,它可能是乙個 5 位數字,但共同點是末尾有 3 個零。
那是。 a[i]*10^(i-1)*b[j]*10^(j-1)--a[i]*b[j])*10^(i+j-2)
所以它儲存在 c[i+j-1] 中。
對於 i:=1 到 n+m,將兩個數字乘以最大 n+m 位數。
beginc[i+1]:=c[i+1]+c[i] div 10;
c[i]:=c[i] mod 10;
end;上一步沒有考慮攜帶,這裡一波已經處理了所有的攜帶}
問候。 我是牧師的父親瓊斯·麥克斯韋·哈思(Jones Maxwell Harth),他是兒童**協會(聯合國國際兒童教育**)的一名志願者,在那裡,我的良好監督資金的基礎意味著兒童**協會,我被任命為世界銀行實況調查特別小組的志願者。 >>>More