您的位置:首页 > 其它

大数相乘算法

2015-11-19 14:29 323 查看
不能计算负数,小数。
用string对象存储数值,然后逆序排列,从左向右相乘进位。
[参考1](http://www.cnblogs.com/heyonggang/p/3599857.html)
[参考2](http://www.cnblogs.com/life91/p/3389890.html)


#include<iostream>
#include<string>
void fan(std::string & str);
std::string multiply(std::string & v1, std::string & v2);

int main()
{
using namespace std;
string v1;
string v2;
string mul;

cout << "Enter the first number: ";
cin >> v1;
cout << "Enter the next number: ";
cin >> v2;

mul = multiply(v1, v2);
cout << v1 << " x " << v2 << " = " << mul;

return 0;
}

void fan(std::string & str)
{
char temp = '0';
int start = 0;
int end = str.size() - 1;
while (start < end)
{
temp = str[start];
str[start++] = str[end];
str[end--] = temp;
}
}

std::string multiply(std::string & v1, std::string & v2)
{
fan(v1);
fan(v2);

std::string temp(v1.size() + v2.size() + 1, '0');
unsigned int t = 0;

for (int i = 0; i < v1.size(); i++)
{
unsigned int j;
for (j = 0; j < v2.size(); j++)
{
t += temp[i + j] - '0' + (v1[i] - '0' )* (v2[j] - '0');
temp[i + j] = (t % 10) + '0';
t = t / 10;
}
while (t)
{
temp[i + j++] += t % 10;
t = t / 10;
}
}

for (int i = temp.size() - 1; i >= 0; i--)
{
if (temp[i] != '0')
break;
else
temp.pop_back();
}
fan(temp);
fan(v1);
fan(v2);
return temp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: