检查阿姆斯特朗数的 R 程序


2022 年 2 月 15 日, Learn eTutorial
1752

什么是阿姆斯特朗数?

阿姆斯特朗数是一个神奇的数字,其中每个数字的幂次方(幂次为数字的位数)之和等于该数字本身。它也被称为自恋数或完美加数。

一个 N 位整数可以被称为阿姆斯特朗数,如果它满足以下条件:

abcd...=an+bn+cn+dn+... 

其中 a,b,c,d... 是数字的各个位,n 是数字的位数。

在我们的博客 阿姆斯特朗数基础知识 中,我们对阿姆斯特朗数的概念有详细的描述。它不会让你失望,肯定会帮助你清楚地理解这些数字。

通常,我们寻找阿姆斯特朗数程序来检查一个 3 位数字是否是阿姆斯特朗数,即,数字的各位立方和是否与数字本身相同。因此,我们的 R 程序集合中包含了 3 位阿姆斯特朗数程序,你也可以参考它。

这里我们正在检查一个阿姆斯特朗数,没有任何位数限制。

如何检查给定数字是否是阿姆斯特朗数

如果一个数字的每个数字的 n 次幂之和等于该数字本身,那么这个数字就可以被称为阿姆斯特朗数,其中该数字有 n 位。我们需要计算每个数字的 n 次幂之和。

  • 对于一个 2 位数,它将是每个数字的平方和,
  • 对于一个 3 位数,它将是每个数字的立方和,
  • 对于一个 4 位数,它将是每个数字的 4 次幂之和,依此类推。

例如,以 371 为例,371 的数字是 3、7 和 1。每个数字的立方如下所示。

33 = 3 x 3 x 3 = 27

73 = 7 x 7 x 7 = 343

13 = 1 x 1 x 1 = 1

那么数字的立方和 = 27+343+1

                                                             = 371  

阿姆斯特朗数检查在 R 程序中是如何实现的

下面是在 R 程序中读取值并检查它是否是阿姆斯特朗数的步骤。在此 R 程序中,我们通过使用 readLine() 函数中的“prompt”向用户提供适当的消息,将用户的输入接受到 num 中。查找数字中有多少位并将其保存到 n_digit 中,因为我们只需要根据此值计算幂。此外,将读取的数字的整数值保存到 temp 中。

现在使用 while 循环提取每个数字,并找到每个数字的幂(幂次为数字的位数 n_digit)之和。计算后,检查该和是否等于给定数字本身;如果是,那么它就是阿姆斯特朗数,否则就不是阿姆斯特朗数。

算法

步骤 1:向用户提示适当的消息,使用 readline() 将用户输入存入变量 num

步骤 2:将 n_digit 设置为输入的数字的位数

步骤 3: 初始化 sum=0 并将 num 的值保存到 temp

步骤 4:使用 while 循环查找每个数字的立方和,条件是 temp > 0

  • 通过除以 10 取模运算来分离数字中的一位
  • 计算该数字的 n_digit 次幂与之前数字之和
  • 通过除以 10 运算,避免该数字并取其余数字

步骤 4:将 sumnum 进行比较,如果它们相等,则 print 该数字是阿姆斯特朗数,否则不是。

R 源代码

                                          num = readline(prompt="Enter a number: ")  # read user input
n_digit <- nchar(num)     # nchar() gives count of characters of string num
# initialize sum,temp
sum = 0
temp = as.integer(num)
# find the sum of the cube of each digit
while(temp > 0) {
    digit = temp %% 10
    sum = sum + (digit ^ n_digit)
    temp = floor(temp / 10)
}
if(num == sum) {
    print(paste(num, "is an Armstrong number"))
} else {
    print(paste(num, "is not an Armstrong number"))
}
                                      

输出

"Enter a number: " 
9474
"9474 is an Armstrong number"