You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash打印1-1000的阿姆斯特朗数 现有代码运行报错求助

错误定位
    1. len变量未在每次外层循环开始前重置:len=0定义在全局,每次计算完上一个数字的位数后值会持续累加,后续数字的位数计算完全错误,数值越来越大。你遇到的integer expression expected错误就是因为len溢出了部分解释器的整数判断范围,同时过大的len导致内层循环执行次数指数级增长,脚本无法终止。
    1. 幂次计算逻辑缺失:当前用于计算位数幂的for (( j=1;j<=$len;j++ ))是空循环,没有实现当前位数字^位数的计算,mul永远是初始值1,sum的计算完全不符合阿姆斯特朗数的规则。
    1. Shebang语法错误:首行脚本声明少了感叹号,正确写法是#!/bin/bash,错误声明会导致系统无法正确调用Bash解释器执行,部分语法会报错。
    1. 遍历范围错误:需求是打印1到1000范围内的阿姆斯特朗数,当前外层循环只设置了start<=100,范围不符合需求。
修复后完整代码
#!/bin/bash
for (( start=1; start<=1000; start++ ))              
do
    # 每次计算新数字前重置位数
    len=0
    cl_no=$start                     
    # 计算当前数字的位数
    while [ $cl_no -gt 0 ]
    do        
        cl_no=$(( cl_no / 10 )) 
        len=$(( len + 1 ))
    done                                                                                               
    cln=$start
    sum=0
    # 计算各位数字的len次方之和
    while [ $cln -gt 0 ]
    do
        ldo=$(( cln % 10 ))
        cln=$(( cln / 10 ))
        mul=1
        # 计算当前位的len次方
        for (( j=1; j<=len; j++ ))
        do
            mul=$(( mul * ldo ))
        done
        sum=$(( sum + mul ))   
    done
    if [ $sum -eq $start ]
    then
        echo $start
    fi
done
运行结果

修复后执行脚本会输出1~1000范围内的所有阿姆斯特朗数:

1
2
3
4
5
6
7
8
9
153
370
371
407

内容的提问来源于stack exchange,提问作者simransharma3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:48:02