先用字符串读入大整数,在将字符串倒序,存入数组,在之前需要将数组全部初始化为0。
大数乘法的核心算法是
for (i = 0; i<l1; i++)
for (j = 0; j<l2; j++)
mul[i + j] += aa[i] * bb[j];
先不处理进位,最后在统一处理进位
最后输出大数的时候,需要找到第一个非类元素,然后输出之后的数,使用经典的flag方法
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
char a[201];
char b[201];
int aa[201];
int bb[201];
int mul[410];
memset(aa, 0, sizeof(aa));
memset(bb, 0, sizeof(bb));
memset(mul, 0, sizeof(mul));
//gets(a);
cin.getline(a, 201);
cin.getline(b, 201);
//gets(b);
int i, j;
int l1 = strlen(a);
int l2 = strlen(b);
j = 0;
for (i = l1 - 1; i >= 0; i--)
aa[j++] = a[i] - '0';
j = 0;
for (i = l2 - 1; i >= 0; i--)
bb[j++] = b[i] - '0';
for (i = 0; i<l1; i++)
for (j = 0; j<l2; j++)
mul[i + j] += aa[i] * bb[j];
for (i = 0; i<410; i++)
if (mul[i] >= 10)
{
int re = mul[i] / 10;
mul[i] %= 10;
mul[i + 1] += re;
}
bool f = false;
for (i = 409; i >= 0; i--)
{
if (mul[i] != 0)
{
f = true;
}
if (f)
{
printf("%d", mul[i]);
}
}
if (!f)
printf("0");
printf("\n");
return 0;
}