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

2024-06-18 15:27:41 浏览数 (2)

水仙花数

是指一个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("%dn", 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法"。

0 人点赞