C语言练习题——判断水仙花数(0-100000)

这个代码题需要我们学会C语言知识点学习🔗

  • 循环和选择结构的知识;
  • 函数声明、调用、定义;
  • 数组的知识(目前我们前面没有学习,但这个也可以不用数组存储的)
    • 只是使用数组会方便我们思考这道题目如何落实,思索更简便
  • 这个题目根据我们前面学习的内容是完全够用的

  • 求出0~100000之间的所有"水仙花数"并输出。
  • "水仙花数"是指一个n位数,其各位数字的n次方之和确好等于该数本身,
  • 如:153=1^3+5^3+3^3,则153是一个"水仙花数"。
  • 如:1634:1^4 + 6^4 + 3^4 + 4^4 = 1 + 1296 + 81 + 256 = 1634,则1634是一个"水仙花数"。
  • 0~9都是水仙花数,因为1 = 1^1,2 = 2^1
  • 10不是水仙花数,1^1+0^1=1,10 !=1
  • 这个题目可以先从基础的判断某一个数字是否为水仙花数开始写,比如:输入一个3位的数字,判断是否为水仙花数
c 复制代码
/*输入一个3位的数字,判断是否为水仙花数*/
#include<stdio.h>
int main()
{
	int num=0;
	printf("请输入一个正整数的三位数字:"); 
	scanf("%d",&num);
	int i=0;
	int j=0;
	int k=0;
	i=num%10;
	j=(num/10)%10;
	k=(num/100)%10;
	int sum=0;
	sum=i*i*i+j*j*j+k*k*k;
	if(sum==num)
		printf("YES,%d是水仙花数!\n",num);
	else
		printf("NO\n");
	return 0; 
}

c 复制代码
/*
* 求出0~100000之间的所有"水仙花数"并输出。
* "水仙花数"是指一个n位数,其各位数字的n次方之和确好等于该数本身,
* 如:153=1^3+5^3+3^3,则153是一个"水仙花数"。
* 如:1634:1^4 + 6^4 + 3^4 + 4^4 = 1 + 1296 + 81 + 256 = 1634,则1634是一个"水仙花数"。
* 0~9都是水仙花数,因为1 = 1^1,2 = 2^1
*/
#include<stdio.h>
//声明:
int shuixianhua(long n);	//判断是否是水仙花数的函数 
long chengji(int count, long arr_sum);		//得到数字每一位的n(count)次方 的函数 

//主函数:
int main()
{
	long n = 0;
	printf("打印0~100000之间的所有"水仙花数":\n");
	//	printf("请输入一个数字:");		//这个是判断某个数字是否为水仙花数 
	//	scanf("%ld", &n);
	int ret = 0;
	for (n = 0; n <= 100000; n++)
	{
		ret = shuixianhua(n);	
		
		//根据返回值判断是否为水仙花数 
		if (ret)
			printf("%ld 是水仙花数 YES\n", n);
	}
	return 0;
}

//定义: 水仙花数判断 
int shuixianhua(long n)		//153
{
	long arr[1000];		//存储数字的每一位 ,1、5、3 
	int i = 0;
	long temp = n;		//将数字临时存储,153 
	long count = 0;	//计数器 
	for (i = 0; (i < 1000 && temp>0); i++)
	{
		arr[i] = temp % 10;		//3-> 5-> 1
		temp = temp / 10;		//15-> 1 ->0
		count++;				//记录数字有几位 
	}
	long sum = 0;
	for (i = 0; i < count; i++)
	{
		sum += chengji(count, arr[i]);	//得到数字每一位的n(count)次方之和 
	}
	if (sum == n)	//数字 == 每一位次方和 ,则是水仙花数,返回1 
		return 1;
	else			//否则返回0		
		return 0;				
}

//定义: 循环乘积
//得到水仙花数每一位的n(count)次方 的函数 
long chengji(int count, long arr_sum)		//数字的位数,某一位。如:3位,1/5/3中的某一个数字 
{
	int i = 0;
	long sum = 1;
	for (i = 0; i < count; i++)
	{
		sum = sum * arr_sum;
	}
	return sum;
}

上面的代码如果有错误,或者有更简便的写法欢迎大家在评论区指出,感谢大家的浏览!🌹🌹

相关推荐
启观川5 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
辣知6 小时前
辣知·化智77 三千年接力写就的一本书
学习
一木 之林6 小时前
Dify学习笔记 01 · 平台入门与实战:部署、五类应用、RAG与MCP(第1-16集)
人工智能·笔记·学习·计算机视觉
weixin_448119946 小时前
Datawhale Easy Data × AI:构建知识与记忆驱动的 Agent笔记8
人工智能·笔记·react.js
摸鱼 特供版6 小时前
一款边录边标注的轻量截图录屏工具
windows·学习·电脑·音视频·软件需求
wuminyu6 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
陈年老古董6 小时前
Hive 函数学习笔记(下):窗口函数与经典案例
hive·笔记·学习
Logic1017 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法
yi0117 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
罗西的思考7 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 — (6)— 奖励机制
人工智能·笔记·学习