/****************************************/
/*程序 Big Number Multi*/
/*作者: zzh */
/*日期:2007-09-29*/
/*调试:VC6*/
/****************************************/
#include<iostream>
using namespace std;
#define MAX 1000
int result[MAX]={0};
char a[MAX/2];
char b[MAX/2];
// s1[lens1]='/0';
// s2[lens2]='/0';
template<typename Type>
void Display(Type s[])
{
cout<<s<<endl;
}
//将字符数组逆序
void Reverse(char s[],int length)
{
char mid[MAX];
for(int i=0;i<length;i++)
{
mid[length-i-1]=s[i];
}
mid[length]='/0';
strcpy(s,mid);
}
//将result数组调整,因为相乘时没有进位,比如result[i]=35
void Schule(int length)
{
int i=0;
for(i=0;i<length;i++)
{
if(result[i]>=10)
{
int temp;
temp=result[i];
result[i]=temp%10;
result[i+1]+=temp/10;
}
}
}
/*相乘,基本思想是:将两个大数存储在字符数组中,
乘数的一位分别乘于被乘数的每一位,将结果保存到result数组中
同时注意对应位的加和进位
*/
int Multi(char s1[],char s2[],int lens1,int lens2)
{
int i,j;
//char mid[MAX];
for(i=0;i<=lens1-1;i++)
{
int temp01,temp02,temp03;
temp01=s1[i]-'0';
for(j=0;j<=lens2-1;j++)
{
temp02=s2[j]-'0';
temp03=temp01*temp02;
result[i+j]+=temp03%10;
result[i+j+1]+=temp03/10;
}
}
return 0;
}
void main()
{
while(true)
{
int lens1,lens2,i;
cin>>a;
lens1=strlen(a);
cin>>b;
lens2=strlen(b);
a[lens1]='/0';
b[lens2]='/0';
Display(a);
cout<<endl;
Display(b);
cout<<endl;
Reverse(a,lens1);
Display(a);
Reverse(b,lens2);
Display(b);
Multi(a,b,lens1,lens2);
Schule(lens1+lens2+1);
if(result[lens1+lens2-1]!=0)cout<<result[lens1+lens2-1];
for(i=lens1+lens2-2;i>=0;i--)
{
cout<<result[i];
}
cout<<endl;
for(i=0;i<=lens1+lens2+1;i++)
result[i]=0;
}
}
空虚的时候写的,代码很多地方没有优化,可以根据自己的需要做相应的修改!