fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <vector>
  5. #include <numeric>
  6.  
  7. std::vector<int> num2vec(int n) {
  8. std::vector<int> v = {100, 10};
  9. std::vector<int> u = {0, 0, 0, 0, 0};
  10. int y;
  11. for (auto k : v) {
  12. if (n > 999) {
  13. u[0] = 1000;
  14. break;
  15. }
  16. if (n < 20) {
  17. u[3] = n;
  18. } else if (n > 99) {
  19. y = n % k;
  20. if (y == 0) {
  21. u[0] = n / k; u[1] = k;
  22. break;
  23. } else {
  24. u[0] = n / k; u[1] = k; u[2] = -1;
  25. n = y;
  26. }
  27. } else {
  28. u[3] = (n / k) * k; u[4] = n % k;
  29. }
  30. }
  31. return u;
  32. }
  33.  
  34. std::string convert(std::vector<int> vec, std::map<int, std::string> t) {
  35. std::string str = "";
  36. for (auto& v : vec) {
  37. str += t.at(v);
  38. }
  39. return str;
  40. }
  41.  
  42. int euler_17(int n, std::map<int, std::string> t) {
  43. int acc = 0;
  44. for (int i = 0; i <= n; i++) {
  45. acc += convert(num2vec(i), t).length();
  46. }
  47. return acc;
  48. }
  49.  
  50. int main(void) {
  51. std::map<int, std::string> table;
  52. std::vector<std::pair<int, std::string>> vec =
  53. {{-1, "and"},
  54. {0, ""}, {1, "one"}, {2, "two"}, {3, "three"}, {4, "four"},
  55. {5, "five"}, {6, "six"}, {7, "seven"}, {8, "eight"}, {9, "nine"},
  56. {10, "ten"}, {11, "eleven"}, {12, "twelve"}, {13, "thirteen"}, {14, "fourteen"},
  57. {15, "fifteen"}, {16, "sixteen"}, {17, "seventeen"}, {18, "eighteen"}, {19, "nineteen"},
  58. {20, "twenty"}, {30, "thirty"}, {40, "forty"}, {50, "fifty"}, {60, "sixty"}, // if (n > 999) {
  59. // u[0] = 1000;
  60. // break;
  61. // }
  62.  
  63. {70, "seventy"}, {80, "eighty"}, {90, "ninety"}, {100, "hundred"}, {1000, "onethousand"}};
  64. for (auto d : vec) {
  65. table.insert(d);
  66. }
  67. std::cout << euler_17(1000, table) << std::endl;
  68. return 0;
  69. }
  70.  
Success #stdin #stdout 0.01s 5472KB
stdin
Standard input is empty
stdout
21124