【前言】
今天是力扣打卡第19天!
太忙了,发的有点晚,抱歉哈,最近笔者作业有点多,也有几题比较好的,所以就整理出来了。
题目:求水仙花数
题目描述:
求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和正好等于该数本身,如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。
注意哦,正常我们求水仙花数算的是三位数,但是这题不是哦,本题要算到十万。
题解:
题目讲的是一个n位数,其各位数字的n次方之和正好等于该数本身,所以我们需要知道要求数的位数,并且这个数的每一位数字上的n次方也需要计算。
首先,求一个数字有多少位
//判断num的位数 //正常代码 int Dig(int num) { int count = 0; while (num) { count++; num
= num / 10; } return count; } //递归解决 //递归解决 int Dig(int num) { int count = 0;
//找边界 if (num < 10) { return 1; } else { count = Dig(num / 10); return ++count;
} }
其次,计算n的k次方
//求n的k次方 //普通方法 int Pow(int n, int k) { int ret = 1; //判断特殊情况 if (n == 0) {
return 0; } while (k) { ret = ret * n; k--; } return ret; } //递归解决 int Pow(int
n, int k) { //找边界 if (k == 0) { return 1; } else { return n * Pow(n, k - 1); } }
最后,判断是否为水仙花数
//判断是否为水仙花数 int func(int num) { int sum = 0; int number = num; int n =
Dig(num); int i = 0; for (i = 0; i < n; i++) { sum = sum + Pow(number % 10, n);
number = number / 10; } if (sum == num) { return 1; } else { return 0; } }
完整代码:
//求出0~100000之间的所有“水仙花数”并输出。 //“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如 : 153=1 ^
3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。 #include<stdio.h> //求n的k次方 //普通方法 //int Pow(int n,
int k) //{ // int ret = 1; // //判断特殊情况 // if (n == 0) // { // return 0; // } //
while (k) // { // ret = ret * n; // k--; // } // return ret; //} // 递归解决: int
Pow(int n, int k) { //找边界 if (k == 0) { return 1; } else { return n * Pow(n, k
- 1); } } 判断num的位数 //int Dig(int num) //{ // int count = 0; // while (num) // {
// count++; // num = num / 10; // } // return count; //} // //递归解决 int Dig(int
num) { int count = 0; //找边界 if (num < 10) { return 1; } else { count = Dig(num
/ 10); return ++count; } } //判断是否为水仙花数 int func(int num) { int sum = 0; int
number = num; int n = Dig(num); int i = 0; for (i = 0; i < n; i++) { sum = sum
+ Pow(number % 10, n); number = number / 10; } if (sum == num) { return 1; }
else { return 0; } } int main() { int i = 0; for (i = 0; i <= 100000; i++) { if
(1 == func(i)) { printf("%d\n", i); } } return 0; }
总结
今天是力扣打卡第19天!
昨天太忙了,没来得及发,这篇是补昨天的,抱歉抱歉哈。