题目
立方变自身
观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17
...
请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?
本题其实有两个难点:1.如何确定整数的范围,即数字循环到哪里结束? 2.变量的重置
首先是整数的范围,从小往大想,一般这种题目循环的次数不会太大。
要知道一个数字为0-9,10^3 = 1000(四位数,sum_max = 4*9 = 36 > 10,有可能),100^3 = 1000000(七位数,sum_max = 7*9 = 63 < 100,不可能),所以外循环一定小于100次(再后来可以自己计算,最精确的为55)
变量的重置很重要,在用sum变量计算数字各位数之和时,一定记住sum要放在for()内部,每次都要sum = 0,重置为0。然sum会累计计数,最后你的答案就是“1”。
贴AC代码(两份)
public static void main(String[] args) {
int count = 0;
for(int i = 1; i < 100; i++) {
int sum = 0;
int a = (int) Math.pow(i, 3);//a为i的3次方
String str = a+"";//将a装换成字符串
String s[] = str.split("");//转换成字符数组
int num[] = new int[s.length];//创建新的数组
for(int j = 0 ; j < s.length ; j++) {
num[j] = Integer.parseInt(s[j]);
sum = sum + num[j];
}
if(i == sum) {
count ++;
System.out.println(sum);
}
}
System.out.println(count);
}
public static void main(String[] args) {
int count = 0;
for(int i = 1 ; i < 55 ; i++) {
int sum = 0;
int a = (int) Math.pow(i, 3);
String str = a+"";//a+"" 指:整形数升类型为字符串
char c[] = str.toCharArray();
for(int j = 0 ; j < c.length ; j++) {
sum = sum + c[j]-'0';// c[j]-'0' 指字符数组元素降类型为整形数
}
if(sum == i) {
count++;
}
}
System.out.println(count);
}