今天我们将会使用C++编写水仙花数程序。
水仙花数是什么?
(以三位数举例)水仙花数是这个数百位的立方(也就是[]³)加上十位的立方再加上个位的立方,恰巧等于这个数。例如:153,1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 153。现在,我想求出所有水仙花数。该怎么办呢?
思路1
首先,我们可以定义个位、十位、百位的循环变量:
int a, b, c;
然后,循环各位(0 ~ 9):
for (a = 1; a <= 9; a++)//注:数的最高位一定不可以是0
for (b = 0; b <= 9; b++)
for (c = 0; c <= 9; c++)
...;
接下来就是判断:
if (a * 100 + b * 10 + c * 1 == a * a * a + b * b * b + c * c * c)
...;
输出结果:
printf("%d%d%d\n",a,b,c);
完整代码1:
#include <bits/stdc++.h>
using namespace std;
int a, b, c;
int main()
{
for (a = 1; a <= 9; a++)
for (b = 0; b <= 9; b++)
for (c = 0; c <= 9; c++)
if (a * 100 + b * 10 + c * 1 == a * a * a + b * b * b + c * c * c){
printf("%d%d%d\n",a,b,c);
}
return 0;
}
如果运行成功,那么会出现这样的界面:
当然,这道题还可以这样做:
思路2
首先,列举出所有的三位数:
for (i = 100; i <= 999; i++)
{
...;
}
然后,拆分出个位、十位、百位:
a = i / 100;//百位
b = i /10 % 10;//十位
c = i % 10;//个位
判断并输出结果:
if (i == a * a * a + b * b * b + c * c * c)
printf("%d%d%d\n",a,b,c);
完整代码2:
#include <bits/stdc++.h>
using namespace std;
int i, a, b, c;
int main()
{
for (i = 100; i <= 999; i++)
{
a = i / 100;
b = i /10 % 10;
c = i % 10;
if (i == a * a * a + b * b * b + c * c * c)
printf("%d%d%d\n",a,b,c);
}
return 0;
}
今日小彩蛋:
试试这个!
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
int i, j, a, b, c;
int main()
{
for (i = 0; i <= INT_MAX; i++)
{
malloc(i);
new char [999999];
if (i == min(i + INT_MAX, i - 54188))
printf("%d%d%d\n",a ,b, c);
}
return 0;
}
(¦3[▓▓] 晚安~