#include <iostream>
using namespace std;
int multi(char a, char b)
{
return (a - '0') * (b - '0');
}
void strMulti(char *a, char *b, char *c)
{
// 最好对a,b和c的合法性进行判断
int lenA = strlen(a);
int lenB = strlen(b);
int maxLen = lenA + lenB;
int *p = new int[maxLen];
memset(p, 0, maxLen * sizeof(int)); // 千万要注意不要写成memset(p, 0, maxLen);
int i, j;
for(j = lenB - 1; j >= 0; j--)
{
for(i = lenA - 1; i >= 0; i--)
{
p[j + i + 1] += multi(b[j], a[i]);
}
}
// 处理进位操作
for(i = maxLen - 1; i >= 1; i--)
{
p[i - 1] += p[i] / 10;
p[i] = p[i] % 10;
}
int *s = p;
// m位正整数和n位正整数相乘,结果的位数必然是(m+n-1)位或者(m+n)位
if(0 == p[0])
{
p++;
}
int *pTmp = NULL;
for(pTmp = p; pTmp < s + maxLen; pTmp++)
{
*c++ = *pTmp + '0';
}
*c = '\0';
delete s;
}
int main()
{
char a[101] = "123456789";
char b[101] = "987654321";
char c[201] = "";
strMulti(a, b, c);
cout << c << endl; // 121932631112635269
return 0;
}
两个大整数相乘(某公司校园招聘机试试题)
本文转载:CSDN博客