题目----水仙花数问题的实现以及对于数字每位数的求解原理分析

简介: 题目----水仙花数问题的实现以及对于数字每位数的求解原理分析

水仙花数

是指一个n位数,其各位数字的n次幂之和等于该数本身。

也就是说如果我们需要求出所有的水仙花数,也就需要知道数字的每一位是什么,并且将它们都提取出来再以n次幂的形式相加,要求结果等于该数本身。

我们设定为三位数,因为位数过高编译器会受不了(bushi)

那么三位数也就需要知道个位十位百位的数字分别是多少。

在这里我们运用模10除10法将每个位数提取出来:

while (num != 0)

{

digit = num % 10;

sum += digit * digit * digit;

num /= 10;

}

该while循环将遍历所有的三位数(100 到 999),计算每个数的各位数字的立方和。

我们将它们打印出来即可。

#include <stdio.h>

int main()

{
   int num, sum, digit;

   printf("所有的三位水仙花数为:\n");
   for (int i = 100; i < 1000; i++) {
       num = i;
       sum = 0;
       
       while (num != 0) {
           digit = num % 10;
           sum += digit * digit * digit;
           num /= 10;
       }

       if (sum == i)

      {
           printf("%d\n", i);
       }
   }

   return 0;
}


原理

这是一个很简单的算法题。但是我们从中能发现一个很常见的公式或者说是定律:

模10除10

它的作用是求出位上的数字。

那么它的原理是什么呢?

我们都知道,

模除运算(取模运算)通常用符号 "%" 表示,在数学中,它表示取两个数相除的余数。当你对一个数进行模 10 运算(即取模 10),实际上是在找到这个数除以 10 的余数。这个运算可以帮助提取给定数字的个位数。

举个例子,如果我们有一个数 365,对它进行模 10 运算:

365 % 10 = 5

这里,结果中的余数 5 就是原始数字 365 的个位数。

因此,模 10 运算能够帮助我们提取整数中的个位数字,因为它返回的余数就是这个数字的个位数。

而这仅仅只能帮我们求出个位数,假设我们需要每一位数呢?

在C语言除法运算中,我们假设某个数a,

a/10=以a的倒数第二数为个位的数

举个例子:

365 / 10 =36

这里,结果中的36就是原先百位数365的后两位数组成的一个十位数。

而在循环中

模10运算与除10运算的结合使用能够帮助我们获得每一位上的数字。

这就是"模10余10法"。

目录
相关文章
|
7月前
【刷题日志】深度理解除(/)与取模(%)附水仙花数以及变种水仙花数题解
【刷题日志】深度理解除(/)与取模(%)附水仙花数以及变种水仙花数题解
|
7月前
|
算法 C语言
(“拨”取数字的典例:N位水仙花数判断及水仙花数变种)
这篇内容介绍了如何判断和生成水仙花数,水仙花数是一个n位数,其各位数字的n次方之和等于该数本身。文章首先回顾了"拨数"的概念,然后通过实例展示了如何判断三位水仙花数,并将其推广到任意位数的水仙花数。作者提供了详细的解题思路和代码示例,强调了解决这类问题时要慢下来,分步骤分析问题。最后,文章还探讨了一个水仙花数的变种问题,即数字拆分后乘积之和等于原数的情况。
210 0
|
7月前
|
C++ Java Go
C/C++每日一练(20230409) 岛屿数量、出现次数最多整数、两数相除
C/C++每日一练(20230409) 岛屿数量、出现次数最多整数、两数相除
51 0
C/C++每日一练(20230409) 岛屿数量、出现次数最多整数、两数相除
|
C语言
【C语言初学必看】水仙花数、变种水仙花数背后的知识
【C语言初学必看】水仙花数、变种水仙花数背后的知识
159 0
|
算法 C++
C/C++每日一练(20230512) 成绩打印、补齐数组、水仙花数
C/C++每日一练(20230512) 成绩打印、补齐数组、水仙花数
130 0
每日一题---输入一个数判断是否为素数
每日一题---输入一个数判断是否为素数
每日一题---输入一个数判断是否为素数
判断一个数是否为4的整数次幂(2的升级版--双份快乐)
判断一个数是否为4的整数次幂(2的升级版--双份快乐)
|
算法
求两个数对应二进制位不同的个数(深度剖析+补充例题)
求两个数对应二进制位不同的个数(深度剖析+补充例题)
186 0
求两个数对应二进制位不同的个数(深度剖析+补充例题)
|
测试技术
软件测试面试题:打印出100-999所有的“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数“,因为153=1的三次方+5的三次方+3的三次方。
软件测试面试题:打印出100-999所有的“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数“,因为153=1的三次方+5的三次方+3的三次方。
306 0