此高精度乘法适用于一个 高精度数 乘以一个 低精度数。

第一步:设一个char数组,计算他的长度。

第二步:输入低精度整数。

第三步:设一个转换函数,将char数组倒序输入,并转化为实数。(提示:转换函数一定要与char数组函数有区分度,不然写着写着就会下意识的混了,以免出错)。

第四步:高精度乘以低精度(在纸上的乘法运算中高精度在下)并进行进制之间的转换。

例:          12  *
   123451234523

第五步:考虑最高位是否存在(最高位可能远远大于零),如果存在就进行最高位加1;再考虑最高位能扩出多少位,具体操作看代码即可。

第六步:考虑最高位是零的情况(如0*183489)如果没有这一步最后输出的就是好几个零。(别忘了最后给留一个零。)

第七步:倒序输出即可。

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


    int b;                     //第二步
    cin >> b;


    int aa[100000];             //第三步
    for(int i=0;i<len;i++)
    {
        aa[i]=a[len-1-i]-'0';
    }

    int jinwei=0;

    for (int i=0;i<len;i++)       //第四步
    {
        aa[i]=aa[i]*b+jinwei;
        jinwei=aa[i]/10;
        aa[i]%=10;
    }

    if(jinwei!=0)               //第五步
    {
        aa[len]=jinwei;
        len++;
        while(a[len-1] >= 10)
        {
            aa[len]   = aa[len-1] / 10;
            aa[len-1] = aa[len-1] % 10;
            len++;
        }
    }
    while(aa[len-1] ==0 && len>1)    //第六步
    {
        len--;
    }
    for (int i=len-1;i>=0;i--)     //第七步
    {
        cout << aa[i] ;
    }
    cout << endl;
    return 0;
}