#输出100-999中所有水仙花数,若三位数ABC=A*A*A+B*B*B+C*C*C,则为水仙花数#
#例子:153=1*1*1+5*5*5+3*3*3(即三个位数的立方和)
思路:
关键是取位的思想:可以令a,b,c分别表示百位数,十位数,个位数。
如何进行取位?用整除(/)和取余(%)就可以完成。
先从个位数c来,例如三位数123要取个位数3,直接对10取余就得到剩下的3了(123%10)
可以补充一下整除和取余的概念:
整除,忽略余数。如13/4,是不是3个4被除掉还剩下1呢,那么整除结果就为3,取余结果就为1。
所以可以简单认为整除就是取整。
取余,即取余数,剩下多少。
明白了取整与取余的概念,剩下的十位百位则不在话下了:
十位b:123/10-->变成12,又变得像取个位数-->12%10-->取出十位数2
百位a: 123/100-->取出百位数1
(注意的是,不宜把/和%多少当做规律背诵,按照解决问题的思路出发思考,才快准狠)
例如:取四位数的百分位数,即1234中的2,该怎么取呢?可以试一试。
接下来,取位完成后我们只需要循环遍历100-999的三位数就OK啦:具体代码为:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int shuixianhua() {
int i=100;
for (i = 100; i < 1000; i++) {
int a = i / 100; int b = i / 10 % 10 ;int c = i % 10;//a,b,c分别表示百十个
if (i == a*a*a + b*b*b + c*c*c) { // =是赋值,一般在if语句中特别注意是==
printf(" %d ", i);
}
}
return 0;
}