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

输入字符串/特殊字符时,3位Armstrong数判定程序误判问题咨询

输入非数字时程序误判为Armstrong数的原因分析

先看你提供的判定3位Armstrong数的C语言代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
  int a, original, rev, rem;
  printf("Enter the number : \n");
  scanf("%d", &a);

  original = a;

  rev = 0;
  while (a != 0) {
    rem = a % 10;
    rev = rev + (rem * rem * rem);
    a /= 10;
  }
  if (rev == original) {
    printf("Its an Armstrong number\n");
  } else {
    printf("Its not an Armstrong number \n");
  }
}

出现误判的核心原因如下:

  1. scanf匹配失败时的变量值问题
    当输入字符串、特殊字符这类非整数内容时,scanf("%d", &a)无法完成整数格式的匹配,此时变量a的值不会被修改。而a是未初始化的局部变量,它的初始值是栈内存里的随机垃圾值。

  2. 未校验输入是否有效
    程序完全没检查scanf的返回值,不知道输入已经失败,直接继续执行后续的Armstrong数判定逻辑。

最常见的误判场景是:如果a的初始垃圾值恰好是0,那么while(a != 0)循环根本不会运行,rev保持初始的0值,此时rev == original(0等于0)的条件成立,程序就会错误输出“是Armstrong数”。哪怕a的垃圾值非0,也存在小概率情况让循环计算后的rev等于original,导致误判。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:00