fork download
  1. #include <string>
  2. #include <list>
  3. #include <iostream>
  4. #include <functional>
  5.  
  6. std::list<int> multiply(const std::list<int>& _a, const std::list<int>& _b)
  7. {
  8. std::list<int> ret;
  9. int mod = 100000000, rem = 0;
  10. auto retit = ret.rbegin(), cur = retit;
  11. for (auto it2 = _b.rbegin(); it2 != _b.rend(); ++it2, ++cur)
  12. {
  13. retit = cur;
  14.  
  15. for (auto it1 = _a.rbegin(); it1 != _a.rend(); ++it1, ++retit)
  16. {
  17. long long a = (long long)(*it2) * (*it1) + rem;
  18. if (retit == ret.rend())
  19. ret.push_front(a%mod);
  20. else
  21. a += *retit, *retit = a%mod;
  22. rem = (int)(a / mod);
  23. }
  24. if (rem)
  25. {
  26. if (retit == ret.rend())
  27. ret.push_front(rem);
  28. else
  29. *retit += rem;
  30. rem = 0;
  31. }
  32. }
  33. return ret;
  34. }
  35.  
  36. int main()
  37. {
  38. std::list<int> l1 = {346, 77523234};
  39. std::list<int> l2 = {6728, 91258627};
  40. std::list<int> ret = multiply(l1, l2);
  41. for (auto& r : ret)
  42. std::cout << r << ' ';
  43. std::cout << std::endl;
  44. }
  45.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
2333420 22549932 95439718