[C语言]水仙花数

注:水仙花数(Narcissistic number),它是指一个n位数(n≥3),其每个位上的数字的n次幂之和等于它本身。如153就是一个水仙花数,因为1^3 + 5^3 + 3^3 =153.同样地,1634也是一个水仙花数,因为1^4+6^4+3^4+4^4 =1634

题目:请设计一个程序,使用户输入一个N( N∈[3,7] ),就能求出N位数里所有的水仙花数。

示例:输入3,输出:153  370  371  407.

思路:根据输入的位数N,从最小的N位数开始递增,用index表示这个递增数,(如N=3时,index从100->999)。对每一个index,先逆序依次取index每一位上的数字,再立方运算并求和,最后与index本身比较。如果相等,输出index,使index+1,求和归零;如果不等,使index+1,求和归零。再重复上述操作,直到遍历并判断每一个N位数是否为水仙花数,跳出循环,输出结果。

#include <stdio.h>
#include <math.h>//用到一个函数pow,pow(a,b)是求a的b次方

//求3~7位数字的水仙花数
//思路:要根据输入的位数N,求出N位数字中所有的水仙花数,对于153,先取1 5 3,再分别作立方运算并求和,如果153 = 1^3 + 5^3 + 3^3 ,则这就是水仙花数
void main()
{

	int digit = 0;//输入
	int temp = 0;//中间变量
	int temp2 = 0;//中间变量2
	int index = 0;//递增数,三位递增数范围100->999
	int sum = 0;//求和
	printf("请输入一个正整数N,3<=N<=7:");
	scanf_s("%d", &digit);


	for(index = pow(10, (digit - 1));index <= pow(10, digit);index+=1)
	{
		temp2 = index;
		//step1:对每一个index,先逆序依次取index每一位上的数字,再立方运算并求和,最后与index本身比较。如果相等,输出index;如果不等,index+1,重复step1
		do
		{
			temp = temp2 % 10;//依次取最后一个数,如153,先取3给temp
			sum = sum + pow(temp, digit);
			temp2 = temp2 / 10;//丢去index的最后一位,如153,丢去3变成15赋给temp2
			
		}while (temp2 > 0);
		if (sum == index)
		{
			printf("%d\n", index); 
		}
		sum = 0;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值