一:代码实现
//大数据乘法运算 #include <stdio.h> #include <stdlib.h> #include <string.h> int BigDataMul(char *num01, char *num02) { int res = 0, i = 0, j = 0; int length01 = 0, length02 = 0, totallength = 0; if(NULL == num01 || NULL == num02) { res = -1; return res; } length01 = strlen(num01); length02 = strlen(num02); totallength = length01 + length02; int *presult = (int *)malloc(sizeof(int) * totallength); memset(presult, 0, sizeof(int) * totallength); if(NULL == presult) { res = -2; return res; } //累乘 for(i = 0; i < length01; i++) { for(j = 0; j < length02; j++) { //将第一位空出来,以防产生进位,注意这个第0位置,表示最高位 presult[i + j + 1] += (num01[i] - '0') * (num02[j] - '0'); } } //累加 倒序 for(i = totallength - 1; i >= 0; i--) { //大于10 表示产生进位 if(presult[i] >= 10) { presult[i-1] += presult[i] / 10;//取出进位 presult[i] %= 10;//取出个位数 } } i = 0; //去除前面的0,因为可能没有产生进位,前面的可能是0 while(0 == presult[i]) { i++; } //可能与0相乘的话,结果全为0 if(i == totallength + 1) { printf("0 "); goto IsZero; } char *plastresult = (char *)malloc(sizeof(char) * totallength); memset(plastresult, 0, sizeof(char) * totallength); if(NULL == plastresult) { res = -2; return res; } for(j = 0; i < totallength; i++, j++) { plastresult[j] = presult[i] + '0'; } for(i = 0; i < totallength; i++) { printf("%c",plastresult[i]); } free(plastresult); plastresult = NULL; IsZero: free(presult); presult = NULL; return res; } int main(int argc, char *argv[]) { BigDataMul("22222","9"); return 0; }