大数乘法模拟
1 // 手动模拟大整数乘法 2 // 使用c++ 里的vector来储存数据 3 // 并且倒着储存数字 4 // 时间复杂度o(n2) 5 void normalize(vector<int>& num){ 6 // n 位 * m 位相乘最多生成n + m位 7 num.push_back(0); 8 for(int i = 0;i < num.size();i ++){ 9 if(num[i] < 0){ 10 int borrow = (abs(num[i] + 9)) / 10; 11 num[i + 1] -= borrow; 12 num[i] += borrow * 10; 13 } 14 else{ 15 num[i + 1] += num[i] / 10; 16 num[i] %= 10; 17 } 18 } 19 while(num.size() > 1 && num.back() == 0)num.pop_back();//去掉尾部的0(相当于真正的头部) 20 } 21 22 23 vector<int> multiply(const vector<int>& a, 24 const vector<int>& b){ 25 vector<int> c(a.size() + b.size() + 1,0); 26 for(int i = 0;i < a.size();i ++){ 27 for(int j = 0;j < b.size();j ++){ 28 c[i + j] += a[i] * b[j]; 29 } 30 } 31 normalize(c); 32 return c; 33 }