天天看點

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

繼續閱讀