您的位置:首页 > 职场人生

49. 搜狗面试题: 大数相乘算法

2017-06-08 19:58 162 查看
分析:

大数能大到整形类型存储不了。须要借助于其它的算法,来完毕乘法运算。

能够使用口算乘法的步骤来模拟乘法操作。例如以下:

123

* 122

=

3 4 6

+ 3 4 6

+ 1 2 3

= 1 5 0 0 6

实现例如以下:

#include<iostream>
#include<string.h>

using namespace std;

char* MutiBigerNum(char* a, char* b)
{
int len1 = strlen(a);
int len2 = strlen(b);
char* res = new char[len1 + len2 + 1];

memset(res, '0', len1+len2);
for(int i=len1-1; i >= 0; i-- )
{
int carry = 0;
for(int j = len2 -1; j >= 0; j--)
{
int temp = (res[i + j+ 1] - '0') + carry + (a[i] - '0')*(b[j] - '0');
carry = 0;
if(temp >= 10)
{
carry = temp/10;
}
res[i+j+1] = temp%10 + '0';
}
res[i] = carry + '0';
}
return res;
}

int main(int argn, char** argv)
{
char *a = "122";
char *b = "123";
if(argn > 2)
{
a = argv[1];
b = argv[2];
}
char* resnum = MutiBigerNum(a, b);
if(strlen(resnum) > 0 && resnum[0] == '0')
cout << a << "*" << b << "=" << resnum + 1 << endl;
else
cout << a << "*" << b << "=" << resnum << endl;
return 0;
}


执行结果例如以下:

./test

122*123=15006

./test 999 888

999*888=887112
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: