第十三弹--水仙花数and水仙花数plus

简介: 第十三弹--水仙花数and水仙花数plus

求水仙花数

定义:水仙花数是指一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

根据定义可知 目标是求出该数数位3次方之和然后和本身比较 和本身相同则是水仙花数。

考虑如何获取数位数值

暴力获取法

int a = tmp % 10;//取模获取个位 tmp 为3位数临时值
int b = (tmp / 10) % 10;//去掉个位 取模获得十位
int c =(tmp / 100) % 10;//去掉个位 十位 取模获得百位

循环判断进行比较 符合定义则打印

for(int i = 100;i <= 999;i++)
{
  int tmp = i;//为了后续比较 使用tmp接收i值
  //获取个位十位百位值 如上
  if((a * a * a + b * b * b + c * c * c)==i)
  {
  printf("%d ",i);
  }
}

完整代码

#include <stdio.h>
int main()
{
  for (int i = 100; i <= 1000; i++)
  {
    int tmp = i;
    int a = tmp % 10;
    int b = (tmp / 10) % 10;
    int c = (tmp / 100) % 10;
    if ((a * a * a + b * b * b + c * c * c) == i)
    {
      printf("%d ",i);
    }
  }
  return 0;
}

水仙花数plus版本(求1-10000内符合定义的数)

此时就不再是求水仙花数,而是求 数位*位数等于本身的数!

因为位数不同 所以次方也会不同 第一步就需要求位数

一、求位数

把i赋值给tmp 每次符合循环条件位数++ 循环结束 获得位数

int count = 1;//使用count 来当做位数
int tmp = i;
while(tmp / 10)//因为count定义时是1 故把tmp/10作为循环条件
{
  count++;//最终获得位数
  tmp /= 10;
}

二、求数位对应的值

使用pow函数计算出每一个位数对应表的值,使用sum求和

每求完一个位数之后 tmp/10 使得求下一位数对应的值

int tmp;//注意这个位置 需要二次赋值
while(tmp)
{
  sum += pow(tmp % 10,count);//使用函数(需要加头文件math.h) pow(值,次方值)
  tmp /= 10;
}

三、符合条件打印

if(sum == i)
{
printf("%d ",i);
}

总代码

#include <stdio.h>
#include <math.h>
int main()
{
  for (int i = 1; i < 100000; i++)
  {
    int count = 1;
    int sum = 0;
    int tmp = i;
    while (tmp / 10)
    {
      count++;
      tmp /= 10;
    }
    tmp = i;
    while (tmp)
    {
      sum += pow(tmp % 10, count);
      tmp /= 10;
    }
    if (sum == i)
    {
      printf("%d ", i);
    }
  }
  return 0;
}

关于pow可以选择使用现成函数 也可以选择自己创建一个求次方函数值。

如有问题 请多多指教!谢谢

相关文章
|
7月前
【刷题日志】深度理解除(/)与取模(%)附水仙花数以及变种水仙花数题解
【刷题日志】深度理解除(/)与取模(%)附水仙花数以及变种水仙花数题解
|
3月前
水仙花数
水仙花数。
107 7
|
7月前
|
算法 编译器 C语言
题目----水仙花数问题的实现以及对于数字每位数的求解原理分析
题目----水仙花数问题的实现以及对于数字每位数的求解原理分析
55 0
|
7月前
|
C++
水仙花数.
这是一个关于求解水仙花数的C++代码片段。水仙花数是指3位数,其各位数字立方和等于该数本身,如153。代码通过循环遍历100到999,拆分每位数字并计算立方和,如果满足条件则输出该数。解题关键在于对三位数的个位、十位、百位进行拆分和立方运算。
75 0
|
7月前
|
算法 C语言
(“拨”取数字的典例:N位水仙花数判断及水仙花数变种)
这篇内容介绍了如何判断和生成水仙花数,水仙花数是一个n位数,其各位数字的n次方之和等于该数本身。文章首先回顾了"拨数"的概念,然后通过实例展示了如何判断三位水仙花数,并将其推广到任意位数的水仙花数。作者提供了详细的解题思路和代码示例,强调了解决这类问题时要慢下来,分步骤分析问题。最后,文章还探讨了一个水仙花数的变种问题,即数字拆分后乘积之和等于原数的情况。
193 0
求1000以内所有的水仙花数
求1000以内所有的水仙花数
|
7月前
|
C++ Java Go
C/C++每日一练(20230409) 岛屿数量、出现次数最多整数、两数相除
C/C++每日一练(20230409) 岛屿数量、出现次数最多整数、两数相除
50 0
C/C++每日一练(20230409) 岛屿数量、出现次数最多整数、两数相除
遇7避过(输出1~100内的安全数,安全数不能带有7,不能被7整除
遇7避过(输出1~100内的安全数,安全数不能带有7,不能被7整除
71 0
|
算法
求水仙花数
求水仙花数
78 0
找出水仙花数
找出水仙花数
83 0