【问题标题】:Armstrong Number logic阿姆斯壮数逻辑
【发布时间】:2019-10-28 15:42:53
【问题描述】:

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

【问题讨论】:

  • 因为您尝试在 十进制 系统中计算数字总和。
  • 您所看到的很可能是如何从一个数字中获取一位数。虽然没有看到你的代码,这只是一个猜测。

标签: algorithm math decimal


【解决方案1】:

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

三位数的阿姆斯壮数是一个整数,其位数的立方和等于该数本身。例如,371 是阿姆斯壮数,因为 33 + 73 + 13 = 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。我们将 64 添加到 sumOfCubes。
  3. 再次循环。 newNumber 变为 24 / 10 = 2。所以我们加 8。
  4. 尝试循环。 NewNumber 变为零,这不符合条件,所以 循环结束。

完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2021-04-03
    • 2021-04-06
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多