include <stdio.h>
#include <string.h>
#define N 40
#define M 100
int res[M];
/*****
* Function: 大整数相乘算法
* 参数:
* a: 乘数,字符串,一个字符代表整数的一位,左侧是最高位,右侧是最低位
* b: 乘数,同上
* n: a的长度
* m: b的长度
* 没有返回值,结果直接放到全局变量res数组中,如果不想要全局变量,也可以在函数中多加一个参数,保存结果。
res中每一位存放相乘结果的各个位,跟输入不同,右侧放的是高位,即高位的对应的数组索引也是高的。
*****/
void Multiply(char *a,char *b,int n,int m) // 大整数相乘
{
int i,j,temp,t,tt;
int num=0;
memset(res,0,sizeof(res));
for(i=0;i<m;i++)
{
temp=0;
for(j=0;j<n;j++)
{
t=(a[n-1-j]-'0')*(b[m-1-i]-'0')+temp;//从最低位开始计算
if(0 == t)
continue;
num = j+i;
tt = res[num]+(t);
res[num] = tt%10;
temp = tt/10;
}
if( temp > 0 )
{
res[++num] += temp;
}
}
for(i=num;i>=0;i--) // 输出结果
printf("%d",res[i]);
printf("\n");
}