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