在32位系统中,int型可表达的最大整数为10位,故不能保存10万乘以10万的结果,其结果整数位为11位,所以不能用通常的乘法运算实现。
long long mul(int a, int b)
{
//初始化工作
string s = to_string(a); //将整型a转为字符串型
vector<int> A;
for (int i = s.size()-1; i >=0; i--)
{
A.push_back(s[i]-'0');//将字符串s中的每个字符保存在容器A中
}
//用逐位乘法运算实现大数乘法运算
int t = 0;
vector<int> C;
for (int j = 0; j < A.size()||t; j++)
{
if(j<A.size())
t += A[j] * b;
C.push_back(t%10); //保存个位数值
cout << t % 10 << endl;
t /= 10;
}
//检查结果是否合法
while (C.size() > 1 && 0 == C.back())//最后一位为0,说明溢出
{
C.pop_back();
}
//将容器C中的字符转为乘积整数
string ssum;
for (int k = C.size()-1; k >= 0; k--)
{
ssum += to_string(C[k]);
}
return stoll(ssum);//返回long long 型
}
//将容器C中的字符转为乘积整数的另一种方法
reverse(C.begin(), C.end());//逆序
long long res = C[0];
for (int i = 1; i < C.size(); i++) {
res *= 10;
res += C[i];
}
int main()
{
cout<<mul(67952,72541)<<endl;
return0;
}
结果如下:
4929306032