2015年Java方向C组第二题
2021-02-09 本文已影响0人
D丝学编程
第二题
标题:立方尾不变
有些数字的立方的末尾正好是该数字本身。比如:1,4,5,6,9,24,25,....
请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。
请提交该整数,不要填写任何多余的内容。
解析:该试题的数据会出现10000的立方,10000的立方在64位机器上可以表示,但是在32位机器上会超出long类型的数据范围,需要借助BigInteger来实现程序功能。
方案一:
在64位机器上代码如下:
int count = 0; //答案
for (long i = 1; i < 10000; i++)
{
long powNum = i*i*i;
String strNum = i+"";
String strPowNum = powNum+"";
String strLast = strPowNum.substring(strPowNum.length()-strNum.length());
if(strNum.equals(strLast))
count++;
}
方案二:
在32位机器上代码如下:
BigInteger start = new BigInteger("1");
BigInteger end = new BigInteger("10000");
BigInteger step = new BigInteger("1");
//compareTo:小于返回-1;等于返回0;大于返回1
int count = 0; //答案
for (BigInteger num = start; num.compareTo(end) == -1; num=num.add(step))
{
BigInteger powNum = num.pow(3);
String strNum = num.toString();
String strPowNum = powNum.toString();
String strLast = strPowNum.substring(strPowNum.length()-strNum.length());
if(strNum.equals(strLast))
count++;
}
System.out.println(count);