编写Armstrong数检测程序出现输出错误,请求排查问题原因
问题分析与解决方法
问题根源
- 位运算逻辑错误:代码里
sum += digit * 3是将每位数字乘以3,而Armstrong数的定义是「每个位上的数字的位数次方之和等于原数」,这里把幂运算错写成了乘法。 - 固定次方数不符合定义:直接用3作为次方数是错误的——Armstrong数的次方数等于数字本身的位数,比如两位数要算每位的平方和,四位数要算每位的四次方和,不能统一用3。
修正后的代码
num = int(input("Enter a number: ")) sum_total = 0 temp = num # 获取数字的位数 digit_count = len(str(num)) while temp > 0: digit = temp % 10 sum_total += digit ** digit_count # 用幂运算计算每位的贡献 temp //= 10 if num == sum_total: print(num, "is an Armstrong number") else: print(num, "is not an Armstrong number")
可选:不用字符串获取位数的实现
如果不想通过转字符串获取位数,可以用循环统计:
num = int(input("Enter a number: ")) sum_total = 0 temp = num # 循环统计位数 digit_count = 0 temp_count = num while temp_count > 0: temp_count //= 10 digit_count += 1 # 计算每位的次方和 temp = num while temp > 0: digit = temp % 10 sum_total += digit ** digit_count temp //= 10 if num == sum_total: print(num, "is an Armstrong number") else: print(num, "is not an Armstrong number")
内容的提问来源于stack exchange,提问作者Afraaz
相关产品推荐
相关产品推荐

