C++程序 检查阿姆斯特朗数
给定一个数字 x ,确定给定的数字是否是 阿姆斯特朗数 。
如果一个有 n 个数位的正整数 被称为 n阶阿姆斯特朗数 (order是数字数位),那么:
abcd… = pow(a,n) + pow(b,n) + pow(c,n) + pow(d,n) + ….
示例:
输入: 153
输出: Yes
153是一个阿姆斯特朗数。
1*1*1 + 5*5*5 + 3*3*3 = 153
输入: 120
输出: No
120不是一个阿姆斯特朗数。
1*1*1 + 2*2*2 + 0*0*0 = 9
输入: 1253
输出: No
1253不是一个阿姆斯特朗数。
1*1*1*1 + 2*2*2*2 + 5*5*5*5 + 3*3*3*3 = 723
输入: 1634
输出: Yes
1*1*1*1 + 6*6*6*6 + 3*3*3*3 + 4*4*4*4 = 1634
方法: 思路是先计算数字位数(或找到阶),将数字x中的每个数字r乘以n次方。如果所有这些值的总和等于n,则返回true,否则返回false。
输出:
时间复杂度: O(log 2 n) + O((log 10 n)*(log 2 d)),其中n是要检查的数字,d是输入数字的位数。
空间复杂度: O(log 2 d),其中d是数字的位数。
上述方法也可以以更短的方式实现:
输出:
给定程序的时间复杂度为O(d),其中d是n输入数字的位数。这由于while循环运行’d’迭代,在每个迭代中执行常量时间操作。
程序的空间复杂度为O(1),因为仅使用了少量整数变量并且不需要使用数组、链表或其他数据结构的额外空间。
找到第n个阿姆斯特朗数
输入: 9
输出: 9
输入: 10
输出 : 153
输出: