// 大数相乘.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 这个函数仅支持正整数相乘,
// 如果使用负数或者小数,需要结合这个逻辑修改函数
string MultiplicationOfLargeNumbers(string str1, string str2);
int main()
{
std::cout << "Hello World!\n";
string str1 = "11";
string str2 = "45";
cout << str1 << " * " << str2 << " = " << MultiplicationOfLargeNumbers(str1, str2) << endl;
}
string MultiplicationOfLargeNumbers(string str1, string str2)
{
vector<int> vecRet;
int nLen1 = str1.length();
int nLen2 = str2.length();
// 相乘后长度不大于 nLen1 + nLen2
vecRet.resize(nLen1 + nLen2);
for (auto i = 0; i < str1.length(); i ++)
{
for (auto j = 0; j < str2.length(); j ++)
{
vecRet[i + j] += (str1[str1.length() - 1 - i] - '0') * (str2[str2.length() - 1 - j] - '0');
}
}
for (int i = 0; i < vecRet.size() - 1; i++)
{
if (vecRet[i] > 9)
{
vecRet[i + 1] += vecRet[i] / 10;
vecRet[i] = vecRet[i] % 10;
}
}
string strRet;
for (auto v : vecRet)
{
strRet = to_string(v) + strRet;
}
for (string::iterator it = strRet.begin(); it != strRet.end(); it ++)
{
// 只有可能第一位为0,不可能前两位都为0,这里随便写
if ('0' == *it)
{
strRet.erase(it);
}
else
{
break;
}
}
return strRet;
}
C++ 大数相乘
最新推荐文章于 2024-05-08 21:31:31 发布