此高精度乘法适用于一个 高精度数 乘以一个 低精度数。
第一步:设一个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;
}



京公网安备 11010502036488号