主题:11.“多精度乘法”
96131
[专家分:0] 发布于 2006-04-21 11:02:00
任意输入两个多精度的整数。求这两个数相乘的准确值
例 N1=56666666666666665555
N2=1223123123123123123
输出
69310110310310308943628128128128128265
回复列表 (共12个回复)
沙发
maxumi [专家分:2200] 发布于 2006-04-21 13:44:00
就像做小学乘法一样,一位一位地乘.
板凳
96131 [专家分:0] 发布于 2006-04-21 15:46:00
还是不懂,能给出思路和程序吗?拜托了
3 楼
安徽我最帅 [专家分:10] 发布于 2006-04-21 16:38:00
这题的方法常见的是把这些数用数组读入。然后再一位一位的相乘。在想乘的过程中,就和乘法没有什么两样了。当然在相乘以前一定要把这些数组中的无素转化成数字。
这并不是一个难题。
4 楼
96131 [专家分:0] 发布于 2006-04-21 21:39:00
问题是我不知道从何下手,意思我理解一些了,可未能完全领悟,能给个程序加说明吗?万分感谢
5 楼
jzyray [专家分:20610] 发布于 2006-04-22 00:46:00
从网上搜吧,一堆一堆的。
去看奥赛基础也行。
6 楼
96131 [专家分:0] 发布于 2006-04-22 09:19:00
能不能给个程序出来啊,感谢
7 楼
caseissamll [专家分:110] 发布于 2006-04-22 09:51:00
去看偶那贴 :…<[em10][em10][em10]
8 楼
贺天行宝 [专家分:2300] 发布于 2006-04-22 13:40:00
var
s1,s2:string;
a,b,c:array[1..100]of longint;
i,j,k,l,l1,l2:longint;
begin
readln(s1);
readln(s2);
l1:=length(s1);l2:=length(s2);
for i:=1 to l1 do
a[l1-i+1]:=ord(s1[i])-48;
for i:=1 to l2 do
b[l2-i+1]:=ord(s2[i])-48;
for i:=1 to l1 do
for j:=1 to l2 do
begin
c[i+j-1]:=c[i+j-1]+a[i]*b[j];
c[i+j]:=c[i+j-1] div 10;
c[i+j-1]:=c[i+j-1] mod 10;
end;
i:=100;
while (c[i]=0)and(i>=2) do dec(i);
for j:=i downto 1 do write(c[j]);
writeln;
end.
9 楼
maxumi [专家分:2200] 发布于 2006-04-24 09:09:00
请问8楼,你为什么每乘一位就处理一次进位呢?
全乘完之后再处理不是更省时间吗?
10 楼
贺天行宝 [专家分:2300] 发布于 2006-04-24 19:14:00
你的也对,但我习惯了
而且万一位数太大,那个元素超界了呢?
我来回复