C语言输出水仙花数字的代码逻辑

什么是水仙花数?

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

我们本次输出0 ~ 10000区间的水仙花数

制作前要

首先我们需要:

1.判断该数字是几位数

2.求出数字的个位数、十位数、百位数.....

3.将第二步求出的数字分别乘上n次方

4.判断该数字是不是水仙花数

是:输出

不是:continue(跳过)

开始制作:

1.判断该数字是几位数:

我们可以将变量(c)/=10,除一次 b + 1

这样,c  == 0时,b刚好等于a的位数

如:do{

                c /= 10;

                b++;

        while(a > 0);

比如:c = 123;

那么b的计算过程就是:

c /= 10 ,c = 12;b = 1

再次循环 c = 1; b = 2;

再次循环c = 0; b = 3;

跳出判断数字时几位数的循环;

2.求出数字的个位数、十位数、百位数...

考虑到a是循环中不能变的变量(如果变了,会影响到整个循环)

所以我们需要专门设置一个局部变量,令其 = a;、

我们用number = a

用number来计算每位数的具体值

个位数= number % 10;

十位数需要在number的基础上 / 10,然后再%10,求出来的就是十位数上的数字

以此类推:

我们令a=1234,来测试一下

通过监视,我们可以看到。每位数都对应上了

3.将第二步求出的数字分别乘上n次方

我们在前面计算出了a是几位数。因此可以利用if判断语句,将不同的结果,送往不同的计算分支里

几位数,就是几次方。

我们直接再次设置一个局部变量(number)

注:这里的number和前文的number都是局部变量,但是不是同一个区间。所以并不冲突

number= 每位数的n次方

4.判断该数字是不是水仙花数

这个可以说是最简单的了,我们只需要一个简单的判断语句

if(a == number),成立则输出,不成立则跳过

这四步做完,我们的代码就敲好了。

结果大概为:

代码:

#define _CRT_SECUER_NO_WARNINGS1
#include <stdio.h>


int main()
{
    int a;
    int b;
    int c = 0;
    for (a = 0; a < 10000; a++) {
        int number = a;
        int one = number % 10;
        int tow = (number /= 10) % 10;
        int three = (number /= 10) % 10;
        int four = (number /= 10) % 10;
        b = 0;
        c = a;
        do{
            c /= 10;
            b++;
        }while (c > 0 );
        if (b == 1) {
            printf("%d ", a);
        }
        else if (b == 2) { 
            int number = a % 10 * a % 10 + a / 10 * a / 10;
            if(a == number) {
                printf("%d", number);
            }
            else {
                continue;
            }
        }
        else if (b == 3) {
            int number = (one * one * one) + (tow * tow * tow) + (three * three * three);
            if (a == number) {
                printf("%d ", number);
            }
            else {
                continue;
            }
        }
        else if (b == 4) {
            int number = (one * one * one * one) + (tow * tow * tow * tow) + (three * three * three * three) + (four * four * four * four);
            if(a == number) {
                printf("%d ", number);
            }
            else {
            continue;
            }
        }
    }
    return 0;
}

  • 42
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值