C语言 输入位数n寻找n位数的阿姆斯特朗数

本文介绍了一个C++程序,通过两个嵌套循环计算给定位数的数字中,其各位数字的n次方之和等于原数本身的整数。程序首先获取用户输入的位数n,然后遍历该位数范围内的所有数字,对每位上的数字进行n次方运算并累加,找出符合条件的整数并输出。
摘要由CSDN通过智能技术生成

#define _CRT_SECURE_NO_WARNINGS     
#include <stdio.h>  
int add(int x, int* pn) {
    int k = 0, a = *pn, b = 1;
    for (k = 0; k < a; k++) {
        b *= x;
    }
    return b;
}//对应位数上数字的n次方
int main()
{
    int n = 0, i = 0, max = 0, min = 1, div = 0;
    scanf("%d", &n);//输入位数n
    int* pn = &n;
    for (i = 0; i < n - 1; i++) {
        min *= 10;
    }
    max = 10 * min - 1;//若输入n=3,那么min为100,max为999,此为三位数范围
    int x = min, count = 0, k = 1;//count是数一共有多少个数满足条件的变量
    while (x >= min && x <= max) {//满足条件就进入
        int tem = x, rest = 0, sum = 0;//一定要用临时变量!不然若是将第二个while中的tem全部换为x,
        while (tem != 0) {//那么一次循环以后x就为0,仅循环一次。
            rest = tem % 10;//每位上的数
            tem = tem / 10;//缩小十倍继续算
            sum += add(rest, pn);//对应数的n次方相加,算一次加一次
        }
        if (x == sum) {//判断
            printf("%d\n", x);
            count++;//数数
        }
        x++;//算下一个
    }if (count == 0) {
        printf("No output.\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值