废话不说直接进入正题:传说中的水仙花数就是一个三位数的各个位数的三次方之和就是这个数本身例如153=1*1*1+5*5*5+3*3*3。
好,开始解题:首先,题中已经说了水仙花数是一个三位数,也就是说我们需要定义一个循环在100到1000中一个个来验证它是不是水仙花数;
然后就是核心代码了,凭空想的话很难找到思路,至少对我这个菜鸡来说是这样,那怎么办呢?给题上的例子用起来啊,那问题又来了,怎么把153和等号右边的玩意儿联系起来。153,有1有5还有3,右边也是有1有5还有3;取模运算符吧3%10=3 5%10=5 1%10=1,你就说对不对就完事儿了,这里的=是数学意义上的=啊,不是赋值符号,我不想挨怼。人家个位数的取模运算一次就完事,那十位数百位数上的咋搞,先除以十再搞!
为了小伙伴更容易理解,我在十位和百位的运算上加了括号,实际编写中不加也可以
1 #include<stdio.h> 2 int main() 3 { 4 int ge,shi,bai;//定义个位、十位、百位 5 for(int i=100;i<1000;i++) 6 { 7 //个位数计算方法 8 ge=i%10; 9 //十位数计算方法 10 shi=(i/10)%10; 11 //百位数计算方法 12 bai=(i/10/10)%10; 13 14 //判断是否为水仙花数 15 if(i==bai*bai*bai+shi*shi*shi+ge*ge*ge) 16 { 17 //输出水仙花数 18 printf("水仙花数:%d ",i); 19 } 20 21 } 22 23 24 return 0; 25 }
结果:
水仙花数:153
水仙花数:370
水仙花数:371
水仙花数:407