#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1000int main()
{
    int a[MAX]={0},b[MAX]={0},c[MAX]={0};
    int i,j;
    int la,lb,lc;
    char sa[MAX],sb[MAX];
    void multiply(int a[],int b[],int c[],int *la,int *lb,int *lc);
    scanf("%s%s",sa,sb);
    la=strlen(sa);
    lb=strlen(sb);
    for(i=1,j=la-1;i<=la;i++,j--)
        a[i]=sa[j]-'0';
    for(i=1,j=lb-1;i<=lb;i++,j--)
        b[i]=sb[j]-'0';
    multiply(a,b,c,&la,&lb,&lc);
    for(i=lc;i>=1;i--)
        printf("%d",c[i]);
    printf("\n");
    
    return 0;
}void multiply(int a[],int b[],int c[],int *la,int *lb,int *lc)
{
    int i,j;
    for(i=1;i<=*la;i++)
        for(j=1;j<=*lb;j++)
        {
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
    *lc=*la+*lb-(c[*la+*lb]==0);
    return;
}

解决方案 »

  1.   

    大概的代码如下,只需要在程序当中调用main即可:
    const MAX = 1000;function main():Integer;
    var
        a,b,c: array [0..MAX-1] of Integer=(0);
        i,j:Integer;
        la,lb,lc: Integer;
        sa,sb: array[0..MAX-1] of char;
    procedure multiply(a,b,c: array of integer;la,lb,lc:PInteger);
    var
      i,j: Integer;
    begin
        for i:=1 to la^ do
            for j:=1 to lb^ do
            begin
                c[i+j-1] := c[i+j-1] + a[i]*b[j];
                c[i+j] := c[i+j] + c[i+j-1] div 10;
                c[i+j-1] := c[i+j-1] mod 10;
            end;
        if (c[la^+lb^]=0) then
          lc^ :=la^+lb^-1
        else
          lc^ :=la^+lb^;
    end;
    begin
        Result := 0;
        readln(sa);
        readln(sb);
        la=strlen(sa); 
        lb=strlen(sb);
        i:=1;
        j:=la-1;
        while i <=la do begin
            a[i]:=ord(sa[j])-ord('0');
            inc(i);
            dec(j);
        end;
        i:=1;
        j:=lb-1;
        while i <=lb do begin
            b[i]:=Ord(sb[j])-Ord('0');
            Inc(i);
            dec(j);
        end;
        multiply(a,b,c,@la,@lb,@lc);
        for i:=lc downto 1 do
            write(c[i]);
        writeln;
        
    end;
      

  2.   

    做点作业题。
    program Project1;{$APPTYPE CONSOLE}uses SysUtils;const
      MAX = 100;type
      TIntArr = array[0..MAX - 1] of Integer;
      PIntArr = ^TIntArr;procedure multiply(a, b, c: PIntArr; var la, lb, lc: Integer);
    var
      I, J: Integer;
    begin
      for I := 1 to la do
        for J := 1 to lb do
        begin
          Inc(c[i + j - 1], a[i] * b[j]);
          Inc(c[i + j], c[i + j - 1] div 10);
          c[i + j - 1] := c[i + j - 1] mod 10;
        end;
      lc := la + lb - Ord(c[la + lb] = 0);
    end;var
      a, b, c: TIntArr;
      i, j: Integer;
      la, lb, lc: Integer;
      sa: array[0..MAX - 1] of Char;
      sb: array[0..MAX - 1] of Char;
    begin
      Write('输入第一个数:');
      Readln(Input, sa);
      Write('输入第二个数:');
      Readln(Input, sb);
      la := StrLen(sa);
      lb := StrLen(sb);
      i := 1;
      j := la - 1;
      while i <= la do
      begin
        a[i] := Ord(sa[j]) - Ord('0');
        Inc(i);
        Dec(j);
      end;
      i := 1;
      j := lb - 1;
      while i <= lb do
      begin
        b[i] := Ord(sb[j]) - Ord('0');
        Inc(i);
        Dec(j);
      end;
      multiply(@a, @b, @c, la, lb, lc);
      Write('这两个数积是:');
      for i := lc downto 1 do
        Write(c[i]);
      Readln(Input);
    end.