该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include
#define MAXDIGIT 1024
void bignum_multiply(char* data1, char* data2, char* result)
{
int i, j, data1_scanPtr, data2_scanPtr, result_scanPtr = 0;
int data1_num, data2_num, result_num, current_digit, carry_flag = 0;
int result_array[MAXDIGIT];
memset(result, 0, MAXDIGIT);
memset(result_array, 0, sizeof(result_array));
for(data1_scanPtr = strlen(data1) - 1; data1_scanPtr >= 0; data1_scanPtr--)
{
for(data2_scanPtr = strlen(data2) - 1; data2_scanPtr >= 0; data2_scanPtr--)
{
data1_num = data1[data1_scanPtr] - '0';
data2_num = data2[data2_scanPtr] - '0';
result_num = data1_num * data2_num;
current_digit = (strlen(data1) + strlen(data2) - 2) - (data1_scanPtr + data2_scanPtr);
result_array[current_digit] += result_num;
}
}
data1_scanPtr = strlen(data1) - 1;
data2_scanPtr = strlen(data2) - 1;
while((result_scanPtr <= data1_scanPtr + data2_scanPtr) || (result_array[result_scanPtr] > 0) || (carry_flag > 0))
{
result_array[result_scanPtr] += carry_flag;
carry_flag = result_array[result_scanPtr] / 10;
result_array[result_scanPtr] = result_array[result_scanPtr] % 10;
result_scanPtr++;
}
for(result_scanPtr = result_scanPtr - 1; result_scanPtr >= 0; result_scanPtr--)
result[result_scanPtr] = result_array[result_scanPtr] + '0';
for((i = 0, j = strlen(result) - 1); i < j; (i++, j--))
{
char tempChar = result[i];
result[i] = result[j];
result[j] = tempChar;
}
return;
}
int main()
{
int i;
char factor1[MAXDIGIT] = "999999";
char factor2[MAXDIGIT] = "1";
char result[MAXDIGIT];
for(i = 0; i < 25; i++)
{
bignum_multiply(factor1, factor2, result);
strcpy(factor2, result);
}
puts(result);
return 0;
}