水仙花数

求水仙花数的代码及几点理解

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1^3 +5^3 + 3^3
​本题要求编写程序,计算所有N位水仙花数。

输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。

输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:
3
输出样例:
153
370
371
407

#include <iostream>
#include <cmath>

using namespace std;
/*输入n
最外循环——挨个数比较
	第二循环——将某个数拆分并幂加和
		先求模,得到个位
		最内局部循环
			个位的幂
		个位的幂加和
		除10,弃个位,降低位数
与原数字比较*/
int main()
{
	int n;
	cin >> n;
	for (int i = pow(10, n - 1); i < pow(10, n); i++)
	{
		int x = i;//临时的代替整数
		int m = 0;//【个位的幂加和,注意是要每次循环清空的】
		for (int j = 0; j < n; j++)
		{
			int y = x % 10;//得到的个位数
			int a = 1;//个位的幂
			for (int j = 0; j < n; j++)
				a *= y;
			m += a;
			x /= 10;
		}
		if (m == i)
			cout << i << endl;
	}
	return 0;
}

  1. 每个变量的声明位置有讲究。一般来说,不可以一股脑都在最前面声明,尤其是有循环的时候 。比如该题中的m,位置不能擅动,m在每次第二层循环结束是要清空的,如果放到第二层循环里面,就会导致一直累加,导致出错。
  2. 比较复杂的题,先写伪代码,拆分成小问题,再逐个击破。击破过程中切记之后要和整体结合的,不能没有联系的解决。
  3. pow()函数需要和返回的都是double类型,用的多了会导致莫名其妙的问题。
  4. 在求一系列累加累乘问题,可以直接用中间量接着算下一个,不用每次都算一遍。(阶乘的时候)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值