在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