【手把手带你刷LeetCode】——19.水仙花数(作业)

简介: 水仙花数(作业)

【前言】

今天是力扣打卡第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天!

昨天太忙了,没来得及发,这篇是补昨天的,抱歉抱歉哈。


相关文章
|
前端开发 算法 JavaScript
LeetCode在既定时间做作业的学生人数使用JavaScript解题|前端学算法
LeetCode在既定时间做作业的学生人数使用JavaScript解题|前端学算法
125 0
LeetCode在既定时间做作业的学生人数使用JavaScript解题|前端学算法
LeetCode contest 189 5412. 在既定时间做作业的学生人数
LeetCode contest 189 5412. 在既定时间做作业的学生人数
|
算法 PHP
力扣(LeetCode)算法题解:1450. 在既定时间做作业的学生人数
力扣(LeetCode)算法题解:1450. 在既定时间做作业的学生人数
184 0
LeetCode 训练场:1450. 在既定时间做作业的学生人数
LeetCode 训练场:1450. 在既定时间做作业的学生人数
127 0
LeetCode 训练场:1450. 在既定时间做作业的学生人数
[leetcode/lintcode 题解] 阿里算法面试真题:高效作业处理服务
[leetcode/lintcode 题解] 阿里算法面试真题:高效作业处理服务
[leetcode/lintcode 题解] 阿里算法面试真题:高效作业处理服务
|
4月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
5月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
65 6
|
5月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
130 2