水仙花数:
public class NarcissusNumber {
public static void main(String[] args){
for (int i=100;i<=999;i++){
int a = i/100;//获取百位
int b = (i%100)/10;//获取十位
int c = i%10;//获取个位
if(i==a*a*a+b*b*b+c*c*c){
System.out.println(i);
}
}
}
}
判断奇数偶数:
public class ImparityCheck{
public static void main(String[] args) {
/*
* 可以通过判断余数是否为0来判断“奇数”和“偶数”。
* 不能用余数是否为1来判断“奇数”和“偶数”,因为还有负数。
*/
int a =-2147483647;
String str=a%2==0?"偶数":"奇数";
String str2=a%2!=0?"奇数":"偶数";
System.out.println(str+str2);
/*
* 通过位运算来判断“奇数”和“偶数”。
* 因为当数值存储为二进制时,判断它是奇数还是偶数只需要看最低位。
* &运算特点是,有0即0,当我们用变量a&1时,则一定会把最低位之前的所有位全部变成0。
* 这个时候,如果变量a是偶数,那么最低位为0,则(a&1)最终结果为0。
* 如果变量a是奇数,那么最低位为1,则(a&1)最终结果为1。
* 变量a&1的结果,有且仅有以上两种情况。
*/
String str3=(a&1)==1?"奇数":"偶数";
String str4=(a&1)!=1?"偶数":"奇数";
String str5=(a&1)==0?"偶数":"奇数";
String str6=(a&1)!=0?"奇数":"偶数";
String str7=(a&1)<1?"偶数":"奇数";
String str8=(a&1)>0?"奇数":"偶数";
System.out.println(str3+str4+str5+str6+str7+str8);
/*
* int类型是32位2进制,最高位为符号位,我们可以通过按位左位移运算来把变量a的最低位移到最高位,
* 然后通过判断变量a按位左位移后的数值是否是负数来判断一开始变量a的最低位是1还是0。
* 也就是int类型按位左位移31位即可把最低位移到最高位。
*/
String str9=a<<31<0?"奇数":"偶数";
System.out.println(str9);
/*
* 貌似位运算和比较运算没有优先级顺序,所以从左往右算。
* 也可以写成String str9=(a<<31)<0?"奇数":"偶数";
*/
String str10=(((a>>>1)<<1)==a)?"偶数":"奇数";//无符号右位移
String str11=(((a>>>1)<<1)!=a)?"奇数":"偶数";
System.out.println(str10+str11);
/*
* 当将变量a进行向右移1位时,则二进制数最低位溢出。
* 当再将它向左移1位时,则此时的最低位补0.
* 此时得到的值如果和原来的变量a的值相等,则变量a本身二进制最低位为0,则为偶数
* 如果不相等,则变量a本身二进制最低位为1,则为奇数
*/
String str12=(((a>>1)<<1)==a)?"偶数":"奇数";
String str13=(((a>>1)<<1)!=a)?"奇数":"偶数";
System.out.println(str12+str13);
}
}