Dart语言实现阿姆斯特朗数判断函数遇大数计算异常问题
解决阿姆斯特朗数判断函数处理大数时的溢出问题
你的代码核心问题出在使用dart:math的pow函数计算大指数幂:pow返回的double类型有取值范围限制,当处理超大数字(比如长度超过30位的数)时,计算结果会超出double的最大容量,触发数值溢出,表现为结果变成负数,最终导致BigInt转换后的数值完全错误。
修正后的代码
import 'dart:math'; bool isArmstrongNumber(String number) { final tempNumber = BigInt.parse(number); var totalNumber = BigInt.from(0); final digitCount = number.length; for (int i = 0; i < digitCount; i++) { int tempValue = int.parse(number[i]); // 改用BigInt原生幂运算,避免double溢出 totalNumber += BigInt.from(tempValue).pow(digitCount); } return totalNumber == tempNumber; }
关键改动说明
- 替换幂运算方式:放弃
double类型的pow,改用BigInt的内置pow方法,全程以高精度整数计算,彻底避免溢出问题。 - 补充返回逻辑:原代码缺少判断后的返回语句,补上
return totalNumber == tempNumber;完成阿姆斯特朗数的核心判断。 - 提取重复变量:把
number.length存为digitCount,减少重复调用,提升代码可读性。
内容的提问来源于stack exchange,提问作者Berat Kutluca
相关产品推荐
相关产品推荐

