newwy
奋斗在IT路上的小蜗牛。一步一步往上爬,爬到小牛,在到大牛,然后是神牛,然后是犇,然后就可以离开IT行业,回归大自然了。 远离IT,珍爱生命!!! 记录学习的点滴。

模拟,竖式计算乘法。

没有测试效率。欢迎更好的高精度乘法。

#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);	
	}
}

 

posted on 2010-10-12 00:19  newwy  阅读(630)  评论(1编辑  收藏  举报