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

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

水仙花数

是指一个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法"。

目录
相关文章
|
8月前
【刷题日志】深度理解除(/)与取模(%)附水仙花数以及变种水仙花数题解
【刷题日志】深度理解除(/)与取模(%)附水仙花数以及变种水仙花数题解
|
算法 搜索推荐 程序员
C语言第十三练——输入一个正整数,判断这个数是否是素数
C语言第十三练——输入一个正整数,判断这个数是否是素数
139 0
|
机器学习/深度学习 C语言
C语言:给定两个数,求这两个数的最大公约数(新思路:辗转相除法)
思路一:普通方法 总体思路: (一). 生成相关变量; 从键盘输入两个数;
149 0
C语言:给定两个数,求这两个数的最大公约数(新思路:辗转相除法)
遇7避过(输出1~100内的安全数,安全数不能带有7,不能被7整除
遇7避过(输出1~100内的安全数,安全数不能带有7,不能被7整除
75 0
|
算法 C++
C/C++每日一练(20230512) 成绩打印、补齐数组、水仙花数
C/C++每日一练(20230512) 成绩打印、补齐数组、水仙花数
135 0
|
算法
求两个数对应二进制位不同的个数(深度剖析+补充例题)
求两个数对应二进制位不同的个数(深度剖析+补充例题)
186 0
求两个数对应二进制位不同的个数(深度剖析+补充例题)
【C语言】(错题整理) 寻找完数、字符串中各类字符数的统计、最大公约数和最小公倍数、回文数计算 (循环、函数相关内容)
本篇博客旨在整理最近在头歌遇到的难题、错题,对其进行分析并整理。 一、循环 1.寻找完数(计算因子例题) 一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出1000之内的所有完数。 这道题的首要任务就是找到各个数的因子,然后再对其进行判断。那么计算这个数的因子,我们可以用循环,试每个小于它的数对其进行求余%,结果为零即是因子。
|
人工智能 C语言
C语言求100以内的偶数和、求十个数的乘积习题示例
C语言求100以内的偶数和、求十个数的乘积习题示例
433 0
C语言求100以内的偶数和、求十个数的乘积习题示例
|
C语言
浙大版《C语言程序设计(第3版)》题目集习题5-6 使用函数输出水仙花数 (20 分)
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1 ​3 ​​ +
539 0
浙大版《C语言程序设计(第3版)》题目集习题5-6 使用函数输出水仙花数 (20 分)

热门文章

最新文章