等了一个月终于等到华为给安排的实习生在线机试,把自己做的三道题记录了一下,也方便日后复习。这篇是第一题,经典的水仙花数题,一定要审清题目,不要一遇到机试题上来就写输入语句,这道题目就没有要求输入!水仙花数的思想也很经典,在其他地方也会用到其中的细节,mark一下。
题目描述:水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1³+5³+3³=153),要求:输出1000范围内所有水仙花数及水仙花数之和。
输入描述:无
输出描述:1000以内所有水仙花数及总和。
输出例子:
第1个水仙花数:xxx
第2个水仙花数:xxx
第3个水仙花数:xxx
...
水仙花数总和为:xxx
1 public class ShuiXianHua { 2 public static void main(String[] args) { 3 int count=0,sum=0; 4 for(int i=100;i<1000;i++) 5 { 6 if(judge(i)) 7 { 8 System.out.println("第"+(++count)+"个水仙花数:"+i); 9 sum=sum+i; 10 } 11 } 12 System.out.println("水仙花数总和为:"+sum); 13 } 14 public static boolean judge(int x) 15 { 16 int cpx=x; 17 int n=(""+x).length(); //将数字转化为字符串,方便计算数字的长度 18 int s=0; 19 while(x>0) //注意while和if不能混淆使用,if只计算1次,while不满足条件才跳出循环,否则一直运算 20 { 21 int m=x%10; //取余:获取末位数 22 s+=(int)Math.pow(m, n); //Math.pow是double类型的,需要进行类型转换,转换成int类型 23 x=x/10; //丢掉末位数,继续运算 24 } 25 return cpx==s; 26 } 27 }