立方变自身
Posted 8023spz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了立方变自身相关的知识,希望对你有一定的参考价值。
观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17
...
请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?
请填写该数字,不要填写任何多余的内容或说明性的文字。 答案:
显然是有个范围的,一开始直接把范围设大,结果是6.
但是仔细分析,n位数各位和最大是9n,n位数的三次方最多3n位,各位和最大27n,n位数最小是10^(n-1),令27n<10^(n-1),显然n>=3就已经不满足了,n最大是2,那么n为2时,27n=54,所以范围再次缩小。
代码:
import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner sc = new Scanner(System.in); private static BigInteger pow3(BigInteger a) { return a.multiply(a.multiply(a)); } private static BigInteger all(BigInteger a) { BigInteger sum = BigInteger.ZERO; while(a.compareTo(BigInteger.ZERO) != 0) { sum = sum.add(a.mod(BigInteger.TEN)); a = a.divide(BigInteger.TEN); } return sum; } public static void main(String[] args) { BigInteger a = BigInteger.ONE; int c = 0; while(a.bitCount() <= 11) { if(a.compareTo(all(pow3(a))) == 0) c ++; a = a.add(BigInteger.ONE); } System.out.println(c); } }
代码:
import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner sc = new Scanner(System.in); private static int all(int a) { int sum = 0; while(a != 0) { sum += a % 10; a /= 10; } return sum; } public static void main(String[] args) { int c = 0; for(int i = 1;i <= 54;i ++) { if(i == all(i * i * i)) c ++; } System.out.println(c); } }
代码:
以上是关于立方变自身的主要内容,如果未能解决你的问题,请参考以下文章
2015年第六届蓝桥杯 - 省赛 - Java大学B组 - B. 立方变自身