Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- void print(const vector<int>& v){
- for(int i = 0; i < v.size(); ++i){
- cerr<<v[i];
- }
- }
- void println(const vector<int>& v){
- print(v);
- cerr<<endl;
- }
- void outprint(const vector<int>& v){
- for(int i = 0; i < v.size(); ++i){
- cout<<v[i];
- }
- }
- void outprintln(const vector<int>& v){
- outprint(v);
- cout<<endl;
- }
- int suma_cyfr(vector<int> v){
- int suma = 0;
- for(int t : v){
- suma += t;
- }
- return suma;
- }
- vector<int> mult(vector<int>, vector<int>);
- int main()
- {
- int z;
- cin>>z;
- for(int i = 0; i < z; ++i){
- string sa, sb;
- cin>>sa;
- cin>>sb;
- int temp = 0;
- if(sa[0] == '-'){
- sa = sa.substr(1, sa.length()-1);
- temp++;
- }
- if(sb[0] == '-'){
- sb = sb.substr(1, sb.length()-1);
- temp++;
- }
- vector<int> a(sa.length());
- vector<int> b(sb.length());
- for(int i = 0; i < a.size(); ++i)
- a[i] = sa[i] - '0';
- for(int i = 0; i < b.size(); ++i)
- b[i] = sb[i] - '0';
- vector<int> p = mult(a, b);
- if(temp % 2 == 1 && suma_cyfr(p) > 0){
- cout<<"-";
- }
- outprintln(p);
- }
- return 0;
- }
- vector<int> add(vector<int> a, vector<int> b){
- while(a.size() > b.size())
- b.push_back(0);
- while(a.size() < b.size())
- a.push_back(0);
- vector<int> sum;
- int carry = 0;
- for(int i = 0; i < a.size(); ++i){
- b.push_back(0);
- int digit = a[i] + b[i] + carry;
- carry = digit / 10;
- digit = digit % 10;
- sum.push_back(digit);
- }
- return sum;
- }
- vector<int> mult(vector<int> a, vector<int> b){
- vector<int> product;
- reverse(a.begin(), a.end());
- reverse(b.begin(), b.end());
- vector<vector<int>> to_add;
- for(int i = 0; i < a.size(); ++i){
- vector<int> row;
- //cerr<<">> row "<<i<<" <<"<<endl;
- int carry = 0;
- for(int j = 0; j < b.size(); ++j){
- int digit = a[i] * b[j] + carry;
- carry = digit / 10;
- digit = digit % 10;
- //cerr<<" j: "<<j<<" | a[i]: "<<a[i]<<" b[j]: "<<b[j]<<" | carry: "<<carry<<" digit: "<<digit<<endl;
- row.push_back(digit);
- }
- if(carry != 0) row.push_back(carry);
- int row_offset = i;
- for(int j = 0; j < row_offset; ++j){
- row.insert(row.begin(), 0);
- }
- //cerr<<"row value (backwards): ";
- //println(row);
- to_add.push_back(row);
- }
- //cerr<<"\n------------------------------------------\n"<<endl;
- //cerr<<">>>> ADDING UP THE ROWS <<<<"<<endl;
- for(vector<int> t : to_add){
- //cerr<<"adding row \"";
- //print(t);
- //cerr<<"\":"<<endl;
- product = add(product, t);
- //cerr<<"TOTAL PRODUCT: ";
- //println(product);
- }
- while(product.back() == 0 && product.size() > 1)
- product.pop_back();
- reverse(product.begin(), product.end());
- return product;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement