您的位置:首页 > 其它

两个大整数相乘(某公司校园招聘机试试题)

2013-09-19 11:21 274 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐