C语言求1到10000的水仙花数

定义:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。                     

这里我们认为n位数中,只要每位的n次方等于该数,该数便是一个水仙花数。

求解思路:1.由于不知道有几位数,所以首先我们先求出n位数确定的位数

                    2.在求余算出n位数的余数之后,利用pow(m,n)求m的n次方函数算出每位数的n次方

                    3.将每位数的n次方相加,判断是否等于该数;如果相等,则是水仙花数,否则不是

//水仙花数:n位数每位数的n次方等于该数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#include <math.h>
int main()
{
	int i = 1;
    //求1到10000的水仙花数
	for (i = 1; i <= 10000; i++)
	{
		int count = 1;    //水仙花数至少是一位
		int tmp = i;
		int sum = 0;
		//1.判断位数
		while (tmp / 10)  
		{
			count++;
			tmp = tmp / 10;
		}
		tmp = i;   //while循环后已改变tmp值,所以tmp需要重新被赋值
		//2.求和
		while (tmp)    //保证最高位的n次方不被丢掉
		{
			sum += pow(tmp % 10, count);    //pow(float x,float y):求次方函数(x的y次方)
			tmp = tmp / 10;
		}
		if (i == sum)
		{
			printf("%d ", i);
		}
	}
	system("pause");
	return 0;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值