/****** big_int_mult.h ****/
#define _BIG_INT_MULT_H
#include<iostream>
#include<string.h>
using namespace std;
void reverse(char chr[],int l){//颠倒数组
int i;
char temp;
for(i=0;i <= l/2;i++){//首尾交换
temp=chr[i];
chr[i]=chr[l-i];
chr[l-i]=temp;
}
}
int multiple(char a[],char b[],int result[]){//函数返回值是乘积的长度
int la,lb,lresult;//a,b及result的位数-1
int i,j;//循环控制变量
int temp;
la=strlen(a)-1;//初始化最后一位lasta,lastb
lb=strlen(b)-1;
reverse(a,la);//将a,b颠倒,下面从个位数开始算起
reverse(b,lb);
for(i=0;i <= la;i++)
for(j=0;j <= lb;j++){
//精华所在,+=用于处理进位
result[i+j]+=(a[i]-48)*(b[j]-48);//-48是减去字符'0'的ASCII值
result[i+j+1]+=result[i+j]/10;//进位
result[i+j]%=10;//自己留的数
}
lresult=i+j+1;//结果长度最多为i+j+1
while(result[lresult] == 0) lresult--;//没有达到长度最多的情况,逆序,高位在后
if(lresult < 0 ){result[0]=0;lresult=0;}//如果是0
for(i=0;i <= lresult/2;i++){ //返回正序的结果
temp=result[i];
result[i]=result[lresult-i];
result[lresult-i]=temp;
}
return lresult+1;
}
#undef _BIG_INT_MULT_H
/***** big_int_mult.cpp *****/
#include"big_int_mult.h"
int main()
{
int len,i;
int result[20]= {0};
char str1[10]="12";
char str2[10]="12";
cout<<"multiple(str1,str2,result)\n"<<str1<<" "<<str2<<" ";
len=multiple(str1,str2,result);
cout<<len<<endl;
for (i=0; i<20; i++)
cout<<result[i];
}