用C语言实现水仙花数的打印(1~100000)
一,先了解什么是水仙花数
水仙花数的定义:“水仙花数”是指一个n位数,其各位数字的n次方之和恰好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
二,分析问题,将复杂问题简单化,分步骤写出自己的想法
-
如,先确定这个n位数是几位数,然后再判断它是不是水仙花数。
-
用什么方法来判断它是不是一个水仙花数
-
以此循环
三,代码实现 (笔者采用的是多文件书写)
先写出怎么打印一个水仙花数的代码,然后再循环即可
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#define A 100000
#include<stdio.h>
#include"narcissistic.h" //引用自定义的头文件,里面存放的是函数的声明
int main() //主函数
{
int i = 0;
for (i = 0; i <= A; i++) //循环判断 i 是否是水仙花数
{
//判断是否为水仙花数
judge(i); //函数
}
return 0;
}
#pragma once //在narcissistic.h 文件中声明
void judge(int a); //判断其是否为水仙花数的函数
int dight(int k); //判断其是几位的函数
函数实现判断其是否为水仙花数
//函数的主体
#include<math.h>
#include<stdio.h>
#include"narcissistic.h"
void judge(int a) //主函数中的 i
{
if (a < 10) //一位数肯定不是水仙花数,将其排除
{
return 0;
}
int k = a;
//位数
int n = 0;
//判断其为几位数
n = dight(a);
//数组存放每个位数
int arr[100000] = { 0 };//应尽量的大
for (int i = 0; i < n; i++)
{
arr[i] = a % 10; //取位数,如153 % 10 = 3
a = a / 10; //取完位数要将这个数在原数中删除掉, 如 153 / 10 = 15,这样才可以继续往下取
}
//验证其是否为水仙花数
int temp = 0;//临时存放变量 如,3的n次方
int sum = 0;
for (int i = 0; i < n; i++)
{
temp = pow(arr[i], n);//使用pow()函数求平方
sum += temp;//结果存放
}
if (sum == k) //将各位数字的n次方之和与该数进行比较,若相等则输出
{
printf("%d ", sum);
}
}
int dight(int k) //判断其为几位数的函数
{
int b = 1;//位数
while (k > 10)
{
if (k / 10 != 0)
{
k = k / 10;
b++;
}
}
return b;
}
以上就是,若要实现的话可与笔者一样,用多文件的书写格式,当然也可以把这几段代码一起写入主函数中,笔者这里写主要是为了让主函数看起来好看,没有其它意思。