#include <stdio.h>
#include <string.h>
/* 大数相乘 2018年9月7日22:21:02 */
/* 大数采取进位处理的函数 */
void carryFunc(int array_num[], int len)
{
for (int k = 0; k < len + 1; k ++)
{
if (array_num[k] >= 10)
{
array_num[k + 1] += array_num[k] / 10;
array_num[k] %= 10;
}
else
{
array_num[k] %= 10;
}
}
}
/* 打印输出数组的函数 */
void printArray(int array[], int length)
{
for (int i = 0; i < length; i ++)
{
printf("%d ", array[i]);
}
printf("\n\n");
}
/* 逆序输出数组的函数 */
void printArrayRe(int array[], int length)
{
if (array[length - 1] == 0)
{
for (int i = length - 2; i >= 0; i --)
{
printf("%d", array[i]);
}
}
else
{
for (int i = length - 1; i >= 0; i --)
{
printf("%d", array[i]);
}
}
printf("\n\n");
}
/* 字符替换成数字的函数 */
void reArray(int array[], char str[], int length)
{
for (int i = 0; i < length; i ++)
{
array[i] = str[length - i - 1] - '0';
}
}
int main()
{
/* 1. 定义字符数组存储数字字符,并通过终端输入 */
char string_numb_upper[100];
char string_numb_under[100];
scanf("%s %s", string_numb_upper, string_numb_under);
//printf(" %s \n %s \n", string_numb_upper, string_numb_under);
/* 2. 把字符逆序转换成数字存入整型数组 */
int m = strlen(string_numb_upper);
int n = strlen(string_numb_under);
int array_numb_upper[m];
int array_numb_under[n];
reArray(array_numb_upper, string_numb_upper, m);
reArray(array_numb_under, string_numb_under, n);
//printArray(array_numb_upper, m); //打印调试
//printArray(array_numb_under, n); //打印调试
/* 3. 两个数组元素逐个相乘并把结果赋值给目标数组 */
int len = m + n;
int array_num[len];
for (int i = 0; i < len; i ++)
{
array_num[i] = 0;
}
for (int i = 0; i < m; i ++)
{
for (int j = 0; j < n; j ++)
{
array_num[i + j] += array_numb_upper[i] * array_numb_under[j];
}
}
/* 4. 进位 */
carryFunc(array_num, len);
/* 5. 打印结果 */
//printArray(array_num, len); // 结果打印调试
printArrayRe(array_num, len); // 最终结果
/* END = 2018年9月9日23:05:16 */
printf("\n\n Hello World ! \n");
return 0;
}