这个代码题需要我们学会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;
}
上面的代码如果有错误,或者有更简便的写法欢迎大家在评论区指出,感谢大家的浏览!🌹🌹