题目链接:http://poj.org/problem?id=2389
题目意思:就是大整数乘法。
题目中说每个整数不超过 40 位,是错的!!!要开大点,这里我开到100.
其实大整数乘法还是第一次写 = =.......大整数加法写得比较多。百练也有一条是大整数乘法,链接如下:http://bailian.openjudge.cn/practice/2980/
一步一步模拟即可,代码就是按这个来写的。
以 835 * 49 为例(亲爱的读者,允许我截图吧)
简直就是神奇呀~~~~~
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int maxn = + ;
char ca[maxn], cb[maxn];
int ia[maxn], ib[maxn];
int res[*maxn+]; int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // ONLINE_JUDGE
while (scanf("%s%s", ca, cb) != EOF)
{
int l1 = strlen(ca);
for (int i = ; i < l1; i++)
ia[l1-i-] = ca[i] - '';
int l2 = strlen(cb);
for (int i = ; i < l2; i++)
ib[l2-i-] = cb[i] - '';
memset(res, , sizeof(res));
for (int i = ; i < l1; i++)
{
for (int j = ; j < l2; j++)
res[i+j] += ia[i] * ib[j];
}
// 处理进位问题
for (int i = ; i < l1+l2; i++)
{
if (res[i] >= )
{
res[i+] += res[i] / ;
res[i] %= ;
}
}
bool flag = false;
for (int i = maxn; i >= ; i--)
{
if (flag)
printf("%d", res[i]);
else if (res[i])
{
printf("%d", res[i]);
flag = true;
}
}
if (!flag)
printf("");
printf("\n");
}
return ;
}