本文适用于高精度之间的相乘,当然,如果不是高精度乘以高精度也是可以的,不过大材小用罢了。

第一步:设两个char 数组,并计算他们的长度(高精度*高精度不用再求两者长度的最大值了,但两者的长度后面会有别的用处)

第二步:设两个int 数组,并将两个char 数组进行转换

第三步:设一个int 数组,进行乘法运算,(一位一位相乘,先不用考虑之间的进位)

第四步;用两个char 数组的长度求出两个数相乘的最小长度(当然,前提是两者任意一个都不为零)。

第五步:对最高位进行判断,如果最高位大于零,则长度加一,如果最高位大于等于十的话,在进行进一步的判断。

第六步:避免最高位是零的情况(如与零相乘时)。

第七步:倒序输出即可。

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
int main ()
{
    char a[100000];                // 第一步
    char b[100000];
    cin >> a >> b ;
    int len1=strlen(a);
    int len2=strlen(b);

    int aa[100000];                 //第二步
    int bb[100000];

    for (int i=0;i<len1;i++)   aa[i]=a[len1-1-i]-'0';
    for (int i=0;i<len2;i++)   bb[i]=b[len2-1-i]-'0';

    int c[100000];                  //第三步

    for(int i=0;i<len1;i++)
    {
        for (int j=0;j<len2;j++)
        {
            c[i+j]=c[i+j]+aa[i]*bb[j];
        }
    }

    int len=len1+len2-1;           // 第四步

    for (int i=0;i<len;i++)
    {
        c[i+1] = c[i+1] + c[i]/10;
        c[i]%=10;
    }

    if(c[len]>0)len++;            //第五步

    while (c[len-1]>=10)
    {
        c[len]=c[len-1]/10;
        c[len-1] %=10;
        len++;
    }

    while (c[len-1]==0 && len>1)    //第六步
    {
        len--;
    }

    for (int i=len-1;i>=0;i--)     //第七步
    {
        cout << c[i];
    }

    cout << endl;
    return 0;
}