前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >题目----水仙花数问题的实现以及对于数字每位数的求解原理分析

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

作者头像
Skrrapper
发布2024-06-18 15:27:41
150
发布2024-06-18 15:27:41
举报
文章被收录于专栏:技术分享技术分享

水仙花数

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档