【C语言】案例:输出n位水仙花数

1.题目

输入一个整数n,输出所有n位的水仙花数

2.代码

cpp 复制代码
#include <stdio.h>
#include <math.h>

// 计算数字的位数
int countDigits(int num) {
    int count = 0;
    while (num != 0) {
        num /= 10;
        count++;
    }
    return count;
}

// 计算水仙花数
void findNarcissisticNumbers(int n) {
    int start = pow(10, n - 1);
    int end = pow(10, n);

    for (int i = start; i < end; i++) {
        int num = i;
        int sum = 0;

        // 计算每位数字的 n 次幂之和
        while (num != 0) {
            int digit = num % 10;
            sum += pow(digit, n);
            num /= 10;
        }

        // 如果和等于原数,即为水仙花数
        if (sum == i) {
            printf("%d\n", i);
        }
    }
}

int main() {
    int n;

    // 输入 n
    printf("输入一个整数 n:");
    scanf_s("%d", &n);

    // 输出所有 n 位的水仙花数
    printf("%d 位的水仙花数有:\n", n);
    findNarcissisticNumbers(n);

    return 0;
}

3.解析

1.main 函数是程序的入口。首先,它通过 printf 提示用户输入一个整数 n,然后使用 scanf 获取用户输入的值。接着,它调用 findNarcissisticNumbers 函数,输出所有n位的水仙花数。

2.函数 findNarcissisticNumbers 用于寻找所有n位的水仙花数。它通过迭代从 start 到 end 的范围内的所有数字,计算每个数字各个位上的数字的n次幂之和,如果和等于原数字,则该数字是水仙花数。找到水仙花数后,使用 printf 输出到控制台。

3.函数 countDigits 用于计算一个整数的位数。它通过不断将数字除以10,直到数字变为0,来统计数字的位数。

相关推荐
superman超哥9 分钟前
Context与任务上下文传递:Rust异步编程的信息高速公路
开发语言·rust·编程语言·context与任务上下文传递·rust异步编程
步达硬件11 分钟前
【Matlab】批量自定义图像处理
开发语言·matlab
军军君0112 分钟前
Three.js基础功能学习七:加载器与管理器
开发语言·前端·javascript·学习·3d·threejs·三维
liulilittle14 分钟前
OPENPPP2 网络驱动模式
开发语言·网络·c++·网络协议·信息与通信·通信
mjhcsp18 分钟前
C++ AC 自动机:原理、实现与应用全解析
java·开发语言·c++·ac 自动机
huihuihuanhuan.xin19 分钟前
后端八股之java并发编程
java·开发语言
寻星探路23 分钟前
【算法通关】双指针技巧深度解析:从基础到巅峰(Java 最优解)
java·开发语言·人工智能·python·算法·ai·指针
崇山峻岭之间25 分钟前
Matlab学习记录32
开发语言·学习·matlab
向上的车轮26 分钟前
如何选择Python IDE?
开发语言·ide·python
爱吃生蚝的于勒37 分钟前
【Linux】进程间通信之匿名管道
linux·运维·服务器·c语言·数据结构·c++·vim