Swift程序:显示两个区间之间的阿姆斯特朗数
本教程将讨论如何编写 Swift 程序来显示两个区间之间的阿姆斯特朗数。
如果一个数的每位数字的 n 次幂之和等于该数本身,则该数被称为阿姆斯特朗数。
例如,数字 407,这里 n = 3
407 = 43 + 03 + 73
407 = 64 + 0 +343
407 =407
因此 407 是阿姆斯特朗数
再例如数字 2346,这里 n = 4
2346 = 24 + 34 + 44 + 64
2346 = 16 + 81 + 256 + 1296
2346 = 1649
因此 2346 不是阿姆斯特朗数。
以下是演示:
输入
假设我们的输入是:
LowerLimit = 1 UpperLimit = 200
输出
期望输出是:
Armstrong Numbers are: 1, 153
算法
以下是算法:
步骤 1 - 声明两个变量来存储上下限。
步骤 2 - 从下限到上限运行一个 for 循环来迭代每个元素。
步骤 3 - 声明另一个变量来存储和。
步骤 4 - 声明一个变量来存储给定数字中总位数。
步骤 5 - 计算给定数字中总位数。
while(armNum != 0){ armNum = armNum/10 count = count + 1 }
步骤 6 - 计算给定数字中每位数字的幂之和:
let rem = armNum % 10 sum = sum + (rem * rem * rem) armNum = armNum/10
步骤 7 - 将和与数字本身进行比较。如果和与数字相等,则该数字是阿姆斯特朗数,否则不是。
步骤 8 - 打印输出。
查找 3 位数的阿姆斯特朗数
示例
下面的程序演示如何在两个区间之间显示阿姆斯特朗数。
import Foundation import Glibc var interval1 = 1 var interval2 = 600 print("Lower Limit:", interval1) print("Upper Limit:", interval2) print("Armstrong numbers are:") for q in interval1..<interval2{ var sum = 0 var armNum = q // Calculate the sum of 3rd power // of individual digit the given number while (armNum != 0){ let rem = armNum % 10 sum = sum + (rem * rem * rem) armNum = armNum/10 } // If the sum is equal to the given number // Then the number is Armstrong number if (sum == q){ print(q) } }
输出
Lower Limit: 1 Upper Limit: 600 Armstrong numbers are: 1 153 370 371 407
在上例代码中,我们有两个区间,下限是 1,上限是 600。现在使用 for 循环迭代给定范围内的每个数字,并找到该数字每位数字的和。计算出和之后,我们通过相互比较来检查和是否等于给定数字。如果和等于数字,则该数字是阿姆斯特朗数,并打印输出。因此,上述代码的工作原理是:
Lower limit = 1 Upper limit = 600 1st iteration: Sum = 0 armNum = 1 while (1 != 0){ let rem = 1 % 10 = 1 sum = 0 + (1 * 1 * 1) = 1 armNum = armNum/10 = 1/10 = 0 } Sum = 1 if (1 == 1) // Condition true{ print(1) } 2nd iteration: Sum = 1 armNum = 2 while (2 != 0){ let rem = 2 % 10 = 2 sum = 0 + (2 * 2 * 2) = 8 armNum = armNum/10 = 2/10 = 0 } Sum = 8 if (8 == 2) // Condition False{ print() // Print nothing } ….. iterate till 599.
查找 n 位数的阿姆斯特朗数
示例
下面的程序演示如何在两个区间之间显示阿姆斯特朗数。
import Foundation import Glibc var interval1 = 406 var interval2 = 5000 print("Lower Limit:", interval1) print("Upper Limit:", interval2) print("Armstrong numbers are:") for q in interval1..<interval2{ var sum = 0 var armNum = q var count = 0 // Count the total number of digits // present in the given number while(armNum != 0){ armNum = armNum/10 count = count + 1 } armNum = q // Calculate the sum of nth power // of individual digits of the given number while (armNum != 0){ let rem = armNum % 10 sum = sum + Int(pow(Double(rem), Double(count))) armNum = armNum/10 } // If the sum is equal to the given number // Then the number is Armstrong number if (sum == q){ print(q) } }
输出
Lower Limit: 406 Upper Limit: 5000 Armstrong numbers are: 407 1634
在上例代码中,我们有两个区间,下限是 406,上限是 5000。现在使用 for 循环迭代给定范围内的每个数字以检查阿姆斯特朗数。因此,为了找到阿姆斯特朗数,我们首先计算数字中存在的总位数。之后,我们找到数字每位数字的 n 次幂之和。计算出和之后,我们通过相互比较来检查和是否等于给定数字。如果和等于数字,则该数字是阿姆斯特朗数,并打印输出。因此,406 到 5000 之间的阿姆斯特朗数是 407 和 1634。