Newer
Older
exercism-cpp / armstrong-numbers / armstrong_numbers.cpp
@Wook Song Wook Song on 30 Oct 2022 579 bytes Easy: Add a solution for "Armstrong Numbers"
#include "armstrong_numbers.h"

#include <cstddef>
#include <cstdint>
#include <string>

namespace armstrong_numbers {
static inline int64_t int_pow(int64_t base, size_t n) {
  int64_t ret = base;

  for (size_t i = 1UL; i < n; ++i) {
    ret *= base;
  }
  return ret;
}

bool is_armstrong_number(int num) {
  int64_t given = static_cast<int64_t>(num);
  size_t len = std::to_string(num).length();
  int64_t sum = 0;

  while (num > 0) {
    sum += int_pow(num % 10, len);
    num /= 10;
  }

  if (given == sum) return true;
  return false;
}
}  // namespace armstrong_numbers