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

求助:C语言函数实现质数/阿姆斯特朗数检测代码无报错但无法运行

问题排查与修复

核心问题分析

  • 重复读取输入导致程序卡顿:arm函数已经通过参数接收了主函数传入的数值,但函数内部又调用scanf("%d",&n);再次读取输入,这会让程序等待用户第二次输入,看起来像“无法正常运行”。
  • 浮点数精度问题:使用pow函数计算幂次时,返回的double类型值可能存在精度误差(比如pow(3,3)可能得到26.9999999),强制转换为int后会丢失精度,导致阿姆斯特朗数判断错误。
  • 质数检测功能未实现:代码中仅标注了//for prime numbers注释,但没有任何质数检测的逻辑代码。

修复后的完整代码

#include<stdio.h>
// 计算整数幂,避免浮点数精度问题
int power(int base, int exp) {
    int result = 1;
    for(int i=0; i<exp; i++){
        result *= base;
    }
    return result;
}

// 阿姆斯特朗数检测函数
void checkArmstrong(int n) {
    int var, rem, sum=0, count=0;
    var = n;
    // 统计数字的位数
    while(var != 0) {
        var /= 10;
        count++;
    }
    var = n;
    // 计算各位数字的幂次和
    while(var > 0) {
        rem = var % 10;
        sum += power(rem, count);
        var /= 10;
    }
    if(sum == n)
        printf("%d is an armstrong number\n", n);
    else
        printf("%d is not an armstrong number\n", n);
}

// 质数检测函数
void checkPrime(int n) {
    if(n <= 1) {
        printf("%d is not a prime number\n", n);
        return;
    }
    int isPrime = 1;
    for(int i=2; i*i <=n; i++){
        if(n % i == 0){
            isPrime = 0;
            break;
        }
    }
    if(isPrime)
        printf("%d is a prime number\n", n);
    else
        printf("%d is not a prime number\n", n);
}

int main() {
    int x;
    printf("Enter the number you desire: ");
    scanf("%d", &x);
    
    // 调用两个检测函数
    checkPrime(x);
    checkArmstrong(x);
    return 0;
}

修复说明

  1. 移除arm函数内部的scanf调用,直接使用传入的参数值。
  2. 自定义power函数实现整数幂运算,避免pow的浮点数精度问题。
  3. 补充完整的质数检测函数checkPrime,实现质数判断逻辑。
  4. 主函数中同时调用质数和阿姆斯特朗数的检测函数,满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:09