#include "oj.h" #include <stdio.h> #include <string> #define OK 0 #define ERROR -1 /* 函数声明 */ void calc1(char* pcStrA, int iLenA, int* piTmp, int num); void accumulate(int iIndex, int *piResult, int iLenResult, int *piTemp, int iLenTemp); char* BignumMultiply(char* pcNumA,int iLenA,char* pcNumB,int iLenB,char* pcResult,int iLenResult); /*=============================================================== 调用calc1和accumulate函数计算大数相乘 ===============================================================*/ char* BignumMultiply ( char* pcNumA, int iLenA, char* pcNumB, int iLenB, char* pcResult, int iLenResult ) { int i = 0; int j = 0; int num = 0; int index = 0; int *piTmp = NULL; int *piResult = NULL; /* 分配临时结果的存放空间 */ piTmp=(int*)malloc((iLenA+1)*sizeof(int)); piResult=(int*)malloc(iLenResult*sizeof(int)); memset(piTmp, 0, (iLenA+1)*sizeof(int)); memset(piResult, 0, iLenResult*sizeof(int)); for (i = iLenB - 1; i>=0; i--) { /* 获取乘数pcNumB中第i位的值 */ num = pcNumB[i] - '0'; /* 计算被乘数与第i位的乘积,结果保存在piTmp整型数组中 */ calc1(pcNumA,iLenA,piTmp,num); /* 将piTmp数组中的值加到piResult数组中 */ index++; accumulate(index,piResult,iLenResult,piTmp,iLenA+1); } printf(" %s ", pcResult); /* 去掉piResult中第一个非零数字前的零 */ i = 0; while (piResult[i++]==0); /* 将整形数组piResult中的值转化成字符串存入pcResult中 */ index = 0; for (j = i - 1; j < iLenResult; j++, index++) pcResult[index] = piResult[j] + '0'; if (iLenResult == i - 1) { pcResult[1] = '