- The Modern C++ Challenge
- Marius Bancila
- 341字
- 2021-06-25 22:01:24
8. Armstrong numbers
An Armstrong number (named so after Michael F. Armstrong), also called a narcissistic number, a pluperfect digital invariant, or a plus perfect number, is a number that is equal to the sum of its own digits when they are raised to the power of the number of digits. As an example, the smallest Armstrong number is 153, which is equal to .
To determine if a number with three digits is a narcissistic number, you must first determine its digits in order to sum their powers. However, this involves pision and modulo operations, which are expensive. A much faster way to compute it is to rely on the fact that a number is a sum of digits multiplied by 10 at the power of their zero-based position. In other words, for numbers up to 1,000, we have a*10^2 + b*10^2 + c. Since you are only supposed to determine numbers with three digits, that means a would start from 1. This would be faster than other approaches because multiplications are faster to compute than pisions and modulo operations. An implementation of such a function would look like this:
void print_narcissistics()
{
for (int a = 1; a <= 9; a++)
{
for (int b = 0; b <= 9; b++)
{
for (int c = 0; c <= 9; c++)
{
auto abc = a * 100 + b * 10 + c;
auto arm = a * a * a + b * b * b + c * c * c;
if (abc == arm)
{
std::cout << arm << std::endl;
}
}
}
}
}
You could take it as a further exercise to write a function that determines the narcissistic numbers up to a limit, regardless their number of digits. Such a function would be slower because you first have to determine the sequence of digits of the number, store them in a container, and then sum together the digits raised to the appropriate power (the number of the digits).
- LabVIEW入門與實戰開發100例
- Oracle Database In-Memory(架構與實踐)
- Access 數據庫應用教程
- DevOps入門與實踐
- Mastering Scientific Computing with R
- PHP 編程從入門到實踐
- 機器學習與R語言實戰
- BeagleBone Black Cookbook
- Haskell Data Analysis Cookbook
- Getting Started with LLVM Core Libraries
- Python全棧數據工程師養成攻略(視頻講解版)
- Oracle GoldenGate 12c Implementer's Guide
- C# Multithreaded and Parallel Programming
- 大數據時代的企業升級之道(全3冊)
- 虛擬現實建模與編程(SketchUp+OSG開發技術)