fork download
  1. #include <iostream>
  2. #include <chrono>
  3. #include <ratio>
  4. #include <vector>
  5. #include <numeric>
  6.  
  7. template <class Rep, class Period = std::ratio<1> >
  8. using tmp_t = std::chrono::duration<Rep, Period>;
  9.  
  10. typedef tmp_t<int64_t> dollar_t;
  11. typedef tmp_t<int64_t, std::ratio<1,100>> cent_t;
  12.  
  13. typedef tmp_t<int64_t, std::ratio<1,100>> store_money_t;
  14. typedef tmp_t<double> show_money_t;
  15. dollar_t dollar_lost_cents_cast(cent_t cents) { return std::chrono::duration_cast<dollar_t>(cents); }
  16. std::ostream& operator<<(std::ostream& os, show_money_t show_money) { os << "$" << show_money.count(); return os; }
  17. std::ostream& operator<<(std::ostream& os, store_money_t store_money) { os << store_money.count(); return os; }
  18.  
  19. int main() {
  20.  
  21. // example
  22. store_money_t store_money = dollar_t(2) + cent_t(20);
  23. store_money += dollar_t(7);
  24. store_money += cent_t(18);
  25.  
  26. cent_t cents = store_money;
  27. dollar_t dollars = dollar_lost_cents_cast(cents);
  28. show_money_t show_money = cents;
  29.  
  30. std::cout << "dollar_lost_cents_cast = " << dollar_lost_cents_cast(store_money).count() <<
  31. ", store_money = " << store_money <<
  32. ", show_money = " << show_money <<
  33. std::endl;
  34.  
  35. std::vector<store_money_t> user_accounts(1000, store_money);
  36. store_money_t total = std::accumulate (user_accounts.begin(), user_accounts.end(), store_money_t(0));
  37. std::cout << "total = " << show_money_t(total);
  38.  
  39. return 0;
  40. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
dollar_lost_cents_cast = 9, store_money = 938, show_money = $9.38
total = $9380