这个题要注意数据类型的范围:
byte:-2^7 ~ 2^7-1,即-128 ~ 127。1字节。Byte。末尾加B
short:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字节。Short。末尾加S
有符号int:-2^31 ~ 2^31-1,即-2147483648 ~ 2147483647。4字节。Integer。
无符号int:0~2^32-1。
long:-2^63 ~ 2^63-1,即-9223372036854774808 ~ 9223372036854774807。8字节。Long。末尾加L。(也可以不加L)
浮点型:
float:4字节。Float。末尾加F。(也可以不加F)
double:8字节。Double。
字符型:
char:2字节。Character。
布尔型:
boolean:Boolean
————————————————
这个题有两种思路:
1.自己写一个函数来判断一个数的立方尾是否和这个数相等;
/**
* 判断ii的立方尾是不是为ii
* @param ii
* @return
*/
private static boolean f(long ii){
String s = ii+"";
long a = ii*ii*ii;
String ss = a+"";
String ansStr = "";
for ( int i = ss.length()-s.length(); i<ss.length(); i++){
ansStr += ss.charAt(i);
}
return ansStr.equals(s);
}
2.对立方数进行取余
//第二种方法:对立方数取余
for ( long i= 1; i < 10000; i++ ){
if (i<10){
if ( i * i * i % 10 == i) ans++;
}else if (i < 100){
if ( i * i * i % 100 == i) ans++;
}else if (i < 1000){
if ( i * i * i % 1000 == i) ans++;
}else if (i < 10000){
if ( i * i * i % 10000 == i) ans++;
}
}
完整代码如下:
package pastExamPaper;
import javax.xml.crypto.dsig.spec.XSLTTransformParameterSpec;
/*
立方尾不变(一定要注意数据类型的范围 !!!)
*/
public class Demo51 {
public static void main(String[] args) {
int ans = 0;
// for ( long i = 1; i < 10000; i++ ){
// if (f(i)){
// ans++;
// System.out.println(i);
// }
// }
//第二种方法:对立方数取余
for ( long i= 1; i < 10000; i++ ){
if (i<10){
if ( i * i * i % 10 == i) ans++;
}else if (i < 100){
if ( i * i * i % 100 == i) ans++;
}else if (i < 1000){
if ( i * i * i % 1000 == i) ans++;
}else if (i < 10000){
if ( i * i * i % 10000 == i) ans++;
}
}
System.out.println(ans);//36
}
/**
* 判断ii的立方尾是不是为ii
* @param ii
* @return
*/
private static boolean f(long ii){
String s = ii+"";
long a = ii*ii*ii;
String ss = a+"";
String ansStr = "";
for ( int i = ss.length()-s.length(); i<ss.length(); i++){
ansStr += ss.charAt(i);
}
return ansStr.equals(s);
}
}