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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:32:45