阿姆斯特朗数逻辑

时间:2019-10-28 15:42:53

标签: algorithm math decimal

我的数学很弱,因此我提出的问题可能与这里的大多数无关,但问题是为什么我们将阿姆斯特朗数除以10?我的意思是我们可以将数字除以10以外的任何其他数字。

1 个答案:

答案 0 :(得分:1)

我认为问题是您不了解阿姆斯壮号码是什么。通过一次网络搜索:

一个三位数的阿姆斯特朗数是一个整数,以使该数位的立方之和等于该数字本身。例如,因为3 3 + 7 3 + 1 3 = 371,所以371是阿姆斯壮数。

因此,要检查任意随机数是否为Armstrong数:例如243。以书面形式计算2×2×2 + 4×4×4 + 3×3×3 = 8 + 16 + 27,这只有99,所以243不是阿姆斯特朗数。

现在,有两种直接的方法可以在计算机程序中获取数字的各个数字。首先,您可以将其转换为字符串。

std::string theString = to_string(243);

然后将每个数字转换回一个数字。这有点毛。

或者您可以这样做:

int sumOfCubes = 0;
for (int newNumber = myNumber; newNumber > 0; newNumber = newNumber / 10) {
    // This is the modulus operator, or the remainder. 243 % 10 = 3.
    // 24 % 10 = 4. and 2 % 10 = 2.
    int digit = newNumber % 10;
    sumOfCubes += digit*digit*digit;
}

if (sumOfCubes == myNumber) {
    cout << myNumber << " is an Armstrong number." << endl;
}

循环中会发生什么:

  1. newNumber初始化为myNumber(在我的示例中为243)。数字 变为3(243除以10的余数为3)。 sumOfCubes + = 27;
  2. 然后循环。 newNumber变为newNumber / 10作为整数,其中 现在是24。数字是4。我们在sumOfCubes中添加64。
  3. 再次循环。 newNumber变为24/10 =2。所以我们加8。
  4. 尝试循环。 NewNumber变为零,这将导致条件失败,因此 循环结束。

完成。