C++中如何读取一个数的位数_求1000以内的水仙花数

点击上方 蓝字关注我们

fcbb724adcea82ce398bb27443d40047.png

大家好,我是阿汤哥。

看知乎上有朋友说还不明白怎么判断水仙花数,今天我们就来看看这个问题。(PS:“求1000以内的水仙花数”这道题阿汤哥记忆犹新。到现在还记得这是我大一上学期期末考试的编程题。)

怎么求水仙花数?

首先给出水仙花数定义。

水仙花数 定义

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

怎么判断一个三位整数是不是水仙花数呢?我们根据它的定义来判断,只要把个位数、十位数、百位数分别取出来,然后做立方和,判断立方和是否等于这个数本身。

现在难点在于,怎么编程求一个三位数的个位数、十位数、百位数?

我们这样来求:

假设一个三位数m=132,我们这样来求它的个十百位数:

求 个十百位数

1、求它的个位数,用这个数对10求余数,个位数a=132%10= 2

2、求它的十位数,把这个数先除以10,商等于13,商13再对10求余数,得到十位数b=13%10=3

3、求它的百位数,把这个数对100求商,百位数c=132/100=1

我们来C语言编程实现“求1000以内的水仙花数”,下面是完整代码:

C语言代码
/**
 * Author: 阿汤哥
 * 微信公众号:C语言修仙
 * 功能: 求1000以内的水仙花数
 */

# include 
# include 


/**
* is_narcissus_number: 判断一个整数是不是素数
*
* @m: 待判断是不是水仙花数的三位数
*
* 返回1:是素数;返回0:不是素数
*/
int is_narcissus_number(int m){
    int a, b, c;

    c = m % 10;     //个位数
    b = (m/10) % 10;  //十位数
    a = m / 100;    //百位数

    if (m == (pow(a, 3)+ pow(b, 3)+ pow(c, 3)))
        return 1;
    else
        return 0;
}

int main(){
    int m, a, b, c;

    //循环判断100~999每个数,如果是水仙花数,那么把它打印出来
    for (int i = 100; i 1000; i++)
    {
        if (is_narcissus_number(i) == 1)
        {
            printf("%d 是水仙花数;\n", i);
        }
    }

    return 0;
}
运行结果

958dde24f2ac2092fec614f627e46e0a.png

往期推荐好文

★C语言编程工具的选择 ★ i++和++i有什么区别? ★ 「建议收藏」C语言编程判断回文数 ★看完你就明白:什么情况下该用int main(int argc, char *argv[])而不是int     main(void) ★C语言编程:打印一个圆形 ★福利:50本C语言电子书免费送了! ★C语言编程求解:1到1000之间所有的素数

692f94e4f42a773dd63388584ff17e27.png

点个在看 你最好看

12aa9e7cb77d05baa00b0425d6dcdeef.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值