回 帖 发 新 帖 刷新版面

主题:11.“多精度乘法”

任意输入两个多精度的整数。求这两个数相乘的准确值
例    N1=56666666666666665555
N2=1223123123123123123
输出
69310110310310308943628128128128128265

回复列表 (共12个回复)

沙发

就像做小学乘法一样,一位一位地乘.

板凳

还是不懂,能给出思路和程序吗?拜托了

3 楼

这题的方法常见的是把这些数用数组读入。然后再一位一位的相乘。在想乘的过程中,就和乘法没有什么两样了。当然在相乘以前一定要把这些数组中的无素转化成数字。
这并不是一个难题。

4 楼

问题是我不知道从何下手,意思我理解一些了,可未能完全领悟,能给个程序加说明吗?万分感谢

5 楼

从网上搜吧,一堆一堆的。
去看奥赛基础也行。

6 楼

能不能给个程序出来啊,感谢

7 楼

去看偶那贴 :…<[em10][em10][em10]

8 楼

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 楼

请问8楼,你为什么每乘一位就处理一次进位呢?
全乘完之后再处理不是更省时间吗?

10 楼

你的也对,但我习惯了
而且万一位数太大,那个元素超界了呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册