首先依据题目要求确定大体解法。题目要求在10~10000间确定满足一定要求的数,那么设这个数字为num,则有范围10 ≤ num ≤ 10000,用区间表示就是[10,10000],那么循环变量范围就确定了。又因为要num满足一定数量关系,所以循环节也确定了,是“计算+判断”型。
具体写起来是这样的:
results = []
for num in range(10,10001):#range()函数提供一个左闭右开的区间,所以将[10,10000]写为[10,10001)。
num_lst = list(str(num))
sum_ = sum([int(i) ** len(num_lst) for i in num_lst])
if num == sum_:
results.append(num)
print(f'要求的数有:\n{results}')
如果要实现图片输出示例的样式,可以对上述代码稍加改动:
results = []
for num in range(10,10001):
num_lst = list(str(num))
sum_ = sum([int(i) ** len(num_lst) for i in num_lst])
if num == sum_:
expand = ''
for i in num_lst:
expand += f'+{i}**{len(num_lst)}'
expand = expand.replace('+','',1)
results.append(f'{num}={expand}')
print('要求的数有:\n')
for result in results:
print(result)
原理是文字的删改与添加,方向是文字信息处理。
输出示例:
不用次方函数,纯用for,要三个for循环嵌套,外层循环为数的大小,内层两个循环计算和
伪代码如下:
// 第1个循环:数字范围
for 10-10000
int z=当前数
int n = 长度
Strin[] s = 每一位数 // 数字转化成一个字符数组
int count=0; // 求和
// 第2个循环,循环每一位数
for n
int c=1; // 每一次循环的和
int s // 第n为数字
// 第3个循环,循环几次(次方)
for 长度
c*=s; // 每一位数的n次方
count+=c; // 每一位数的次方和
if 该数字 = count // 两数相等
满足条件,输出该数