標籤:
一:代碼實現
//大資料乘法運算#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,因為可能沒有產生進位,前面的可能是0while(0 == presult[i]) {i++;}//可能與0相乘的話,結果全為0if(i == totallength + 1) {printf("0\n");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;}
大資料乘法