JavaSE习题 用Java解决水仙花和自幂数问题
目录
1.用Java解决水仙花问题
问题描述:求出0~999之间的所有“水仙花数”并输出。
问题分析:“水仙花数”是指一个三位数,其各个位数字的立方和刚好等于该数本身。如:153=1*1*1+5*5*5+3*3*3,则153是一个“水仙花数”。
根据上述分析可得出两点:
a.“水仙花数”是指一个三位数——则此题实际上是在求100~999之间的所有“水仙花数”并输出;
b.要想将各个位数字立方和相加则需求出各个位分别对应的数字为多少。
即:个位 = 数字%10;
十位 = (数字 / 10) % 10;
百位 = 数字 / 100。
所以可得到如下代码:
public class TestDome {
public static void main(String[] args) {
int num = 100;
while (num <= 999) {
int a = num % 10;
int b = (num / 10) % 10;
int c = num / 100;
if (num == a * a * a + b * b * b + c * c * c) {
System.out.println(num + "是水仙花数");
}
num++;
}
}}
运行结果如下:
2.用Java解决自幂数问题
问题描述:求出0~999999之间的所有“自幂数”并输出。
问题分析:“自幂数”是指一个n位自然数等于自身各个数位上数字的n次幂之和。如:153=1*1*1+5*5*5+3*3*3,则153是一个自幂数,也叫做“水仙花数”。
自幂数科普如下图所示:
根据上述分析可得出两点:
a.“自幂数”是指一个n位数——则此题实际上是在求0~999999之间的所有“自幂数”并输出;
b.我们首先要判断当前这个数字是几位数,我们会发现对这个数不断除以10,除到结果结果为0时所用的次数,就是我们当前这个数字的位数。例如123这个数字,它除了3次结果为0,它的位数就为3。123/10=12; 12/10=1; 1/10=0。
c.接下来要想将各个位数字立方和相加则需求出各个位分别对应的数字为多少。
即:个位 = 数字%10;
十位 = (数字 / 10) % 10;
百位 = 数字 / 100。
d.最后我们对各个位数字进行次方求和,再与原数字进行相比,看其是否相等即可。
e.我们需要了解在Java中如何对数字求次方—则需引用Math.pow( );方法。
所以可得到如下代码:
public class TestDemo {
public static void main(String[] args) {
//自幂数问题
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();//999999
for (int i = 1; i <=n; i++) {
int count = 0;//代表每个数字有几位数
int tmp = i;
while(tmp != 0){
count++;
tmp = tmp/10;
}
//count
tmp = i;
int sum = 0;
while(tmp != 0){
sum += Math.pow(tmp%10,count);
tmp = tmp/10;
}
if(sum == i){
System.out.println(i);
}
}
}
}
运行结果如下: