Description:
Input two numbers (A and B) which are overflow, then output answer (A * B).
My code is as follows:
// bigNumberToMultiply.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#include <math.h>
#define MAX_BIT 100 // The most bits is changed by changing MAX_BIT
#define subtract48(a) a -= 48
#define plus48(a) a += 48
int main()
{
// Initial arraies to store big number.
char num1[MAX_BIT], num2[MAX_BIT], numTemp[MAX_BIT][MAX_BIT], numFinal[2 * MAX_BIT + 2];
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
memset(*numTemp, 0, sizeof(numTemp));
memset(numFinal, 0, sizeof(numFinal));
int i = 0, j = 0, k = 0;
gets(num1);
gets(num2);
while (num1[i++]){
subtract48(num1[i - 1]);
}
while (num2[j++]){
subtract48(num2[j - 1]);
}
int bit1 = i - 2, bit2 = j - 2;
// Multiply by each bit
int more = 0;
for (i = bit2; i >= 0; i--){
for (j = bit1; j >= 0; j--){
numTemp[bit2 - i][bit1 - j] = (num1[j] * num2[i] + more) % 10;
more = (num1[j] * num2[i] + more) / 10;
}
numTemp[bit2 - i][bit1 - j] = more;
more = 0;
}
// To get final answer to numFinal
int maxBit, currentBit; //currentBit is for numFinal
for (i = 0; i <= bit2; i++){
j = MAX_BIT;
while (!numTemp[i][--j] && j >= 0);
maxBit = j;
if (maxBit != 0){
for (j = 0; j <= maxBit; j++){
currentBit = j + i;
numFinal[currentBit] += numTemp[i][j];
while (numFinal[currentBit++] > 9){
numFinal[currentBit] += numFinal[currentBit - 1] / 10;
numFinal[currentBit - 1] %= 10;
}
}
}
}
i = 2 * MAX_BIT + 2;
while (!numFinal[--i]);
for (i; i >= 0; i--){
plus48(numFinal[i]);
printf ("%c", numFinal[i]);
}
putchar ('\n');
system("pause");
return 0;
}
Welcome to contact to me if you find bugs in this program.
My email: alanCode@aliyun.com