模拟,竖式计算乘法。
没有测试效率。欢迎更好的高精度乘法。
#include <iostream>
#include <memory.h>
using namespace std;
char a[100],b[100];//a是乘数,b是被乘数
int len_a,len_b;//a,b的长度
int c[205];//c为结果的存储
void mul(char a[],char b[],int l_a, int l_b)
{
int i,j;
for(i = l_a-1;i >= 0; i--)
{
for(j = l_b - 1; j >= 0; j--)
{
c[i+j+2] = c[i+j+2] + (a[i] -'0') * (b[j] - '0');
//计算乘数a的第i位与被乘数的每一位相乘之后存放在对应的数组位置上
//然后计算每一位上数字的和
//这个操作比较好,保证了相乘之后相加形成了错位,
//易于进行C[]每一位相加操作
}
}
for(i = l_a+l_b; i >= 0; i--)
{
//将每一位数字上确保是<10的数字
c[i-1] = c[i-1] + c[i]/10;
c[i] = c[i] % 10;
}
bool flag = true;//标记是不是0*0
//找到第一个不为0的数字输出,屏蔽前导0
i = 0;
while(c[i] == 0)
{
i++;
}
for(;i<=l_a+l_b;i++)
{
flag = true;
cout<<c[i];
}
if(!flag) cout<<"0";
cout<<endl;
}
int main()
{
while(cin>>a>>b)
{
len_a = strlen(a);
len_b = strlen(b);
memset(c,0,sizeof(c));
mul(a,b,len_a,len_b);
}
}