//
// Created by 卢澳 on 2022/11/11.
//
//输出所有的“水仙花数”,所“水仙花数”是指一个3位数,其各位数字立方和等于
//该数本身。例如,153是一水仙花数因为153=13+53+3(本题是教材第5章第8题)。
#include <iostream>
using namespace std;
int main(void) {
//分析题目我们需要做两件事,分别是输出所有的三位数和检查他们是否满足各位数字立方和等于该数本身本身这一条件
//
//个 : individual 十: ten 百 :hundred(刻意百度的)
int cube(int num);//这是我自己在下面定义的一个求立方的函数,不然直接三个数都手动立方不好看也麻烦
for (int hundred = 1; hundred <= 9; hundred++) {//注意百位不能为0
for (int ten = 0; ten <= 9; ten++) {
for (int individual = 0; individual <= 9; individual++) {
//cout<<hundred*100+ten*10+individual<<endl;//把这些数输出试试看
//检查是否满足各位数字立方和等于该数本身本身
//满足输出
if (hundred * 100 + ten * 10 + individual == cube(hundred) + cube(ten) + cube(individual)) {
cout << hundred * 100 + ten * 10 + individual << endl;
}
}
}
}
//下面这个方法实在论坛找的的,原理我也写了,可以看一看,俩种方法都是对的
//https://blog.csdn.net/cozyxiaoyang/article/details/111160254
//可能会更简单一点,不过更难理解
//其实说穿了,上面函数的思路是用三个数(个十百位)来组合生成三位数,
//而下面函数是直接从100-999这些三位数中求解他们的个十百位上各是什么数
//下面简单说一下这个从多位数中分离每个位上数字的算法
//给万位数(5位)12345求他的万位是啥,很简单12345//10000=1(我用'//'代表整除,即只保留结果的整数位)
//那么给一个n位数N求他的最高位呢?答案是N//n,更进一步求12345的千位呢?如果你不知道不如想想2345的千位怎么求?
//是不是2345//1000,那么怎么把12345变成2345呢?取余就好了啊,12345求千位的答案是12345%10000//1000
//这下我们可以做出总结:求一个n位数N的第m位数字(m<=n):[N%(10^m)]//[10^(m-1)]
//利用这点我们设计新的算法如下:
// int hundred,ten,individual;
// for(int n=100;n<=999;n++){
// hundred = (n%1000)/100;
// ten = (n%100)/10;
// individual = (n%10)/1;
// if (n == cube(hundred) + cube(ten) + cube(individual)) {
// cout << n << endl;
// }
// }
return 0;
}
int cube(int num){
return num*num*num;
}
C++水仙花数
最新推荐文章于 2024-07-16 15:55:00 发布