- 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).
- 手機(jī)安全和可信應(yīng)用開發(fā)指南:TrustZone與OP-TEE技術(shù)詳解
- C++案例趣學(xué)
- Intel Galileo Essentials
- 羅克韋爾ControlLogix系統(tǒng)應(yīng)用技術(shù)
- 深入淺出Serverless:技術(shù)原理與應(yīng)用實(shí)踐
- C語言程序設(shè)計(jì)
- Yii Project Blueprints
- Learning AngularJS for .NET Developers
- Clojure for Machine Learning
- ScratchJr趣味編程動手玩:讓孩子用編程講故事
- 軟件體系結(jié)構(gòu)
- Exploring SE for Android
- Tableau Desktop可視化高級應(yīng)用
- Android Studio開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到App上線 (移動開發(fā)叢書)
- Java 9:Building Robust Modular Applications