C语言 “水仙花数”(包懂)

请看题目:

打印水仙花数

题目内容:

求出0~100000之间的所有水仙花数并输出。

提示: 

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。


前言:

诸位应该注意到了,这里的水仙花数加了引号,其实水仙花数是自幂数的一种,三位自幂数叫做水仙花数。当然还有其他自幂数啦,一到十位自幂数的美名都在这里:

一位自幂数:独身数

两位自幂数:没有

三位自幂数:水仙花数

四位自幂数:四叶玫瑰数

五位自幂数:五角星数

六位自幂数:六合数

七位自幂数:北斗七星数

八位自幂数:八仙数

九位自幂数:九九重阳数

十位自幂数:十全十美数

好啦,不啰嗦,开始解题!@Claffic


大体思路:

要求0~100000之间的自幂数,当然先生成0~100000之间的整数 i 。然后根据自幂数的特点进行判断。

要做的就是

1.计算出 i 是 n 位数;

2.剥离 i 的每一位,各求其 n 次方,相加,判断是否与 i 相等。


解题: 

 1.计算出 i 是 n 位数

以153为例,这是个三位数,3 是怎么来的呢?

153/10 = 15     15/10 = 1    1/10 = 0;(整形之间的除法只取商的整数部分)

 直到 0 ,进行了三次;

按照这个思路写出代码:

int main()
{
	int i = 0;
	for (i = 0; i <= 1000000; i++)
	{
		//1.计算出 i 是 n 位数
		int n = 1;
		int tmp = i;//下面的循环会篡改i的值,此处把i放到tmp中进行循环
		while (tmp > 9)//两位数进入循环,放过一位数(一位数都属自幂数)
		{
			tmp /= 10;
			n++;//计数器
		}
}

 2.剥离 i 的每一位,各求其 n 次方,相加,判断是否与 i 相等

%10 取出个位,/10去掉个位  照此循环直到0即可;

求 i 每一位的 n 次方,可以用pow()函数;

        tmp = i;//原理同上
		int sum = 0;
		while (tmp)
		{
			sum += pow(tmp % 10, n);//计算 i 每一位的 n 次方并求和
			tmp /= 10;
		}
		if (sum == i)
		{
			printf("%d ", i);
		}

 结果展示:

#include<stdio.h>
#include <math.h>//包含pow()函数
int main()
{
	int i = 0;
	for (i = 0; i <= 1000000; i++)
	{
		//1. 计算出i是几位数 - n
		int n = 1;
		int tmp = i;
		while (tmp > 9)//153
		{
			tmp /= 10;
			n++;//1 2 3
		}

		//2.剥离 i 的每一位,各求其 n 次方,相加,判断是否与 i 相等
		tmp = i;
		int sum = 0;
		while (tmp)
		{
			sum += pow(tmp % 10, n);
			tmp /= 10;
		}
		if (sum == i)
		{
			printf("%d ", i);
		}
	}

	return 0;
}


你学会了嘛?快动手写写吧。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Claffic

赏包辣条~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值