10万以内的两个数的乘法

在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

猜你喜欢

转载自blog.csdn.net/fazstyle/article/details/106818034