1.求解M的N次方的最后三位数(M,N均大于10)。
当m, n很大时, m的n次方无法用基本的数据类型表示...分析可以发现, 乘积的最后三位只与乘数和被乘数的最后三位有关, 而与高位无关, 所以每次将乘积结果对1000取模即可...
2.逆序排序
Collections.reverse(list);
Collections.reverse(Arrays.asList(Array));//可以对Object数组排序
这个方法排序之后,数组就变成了一个List了,所以需要先用一个List把Arrays.asList(Array)接收,然后对List逆序,最后再把List元素逐个赋值给数组,这样就返回了一个数组。代码如下:
ArrayList<Integer>l=new ArrayList<Integer>(Arrays.asList(pIntegerArray)); Collections.reverse(l); //反转列表顺序,所以想要逆序排列的话,先要排序,因为它只是反序输出,并没有排序功能,所以要自己先排序
注意这一句 ArrayList<Integer>l=new ArrayList<Integer>(Arrays.asList(pIntegerArray)); //ArrayList的一种构造方法
不能写成ArrayList<Integer>l=(ArrayList<Integer>)(Arrays.asList(pIntegerArray));否则抛出类型转换异常。。。
Arrays.sort(int[], Comparator.reverseOrder()); //不能对Object数组排序
3.判断字符串是否是有效数字,是则返回0,不是则返回-1
接口
int NumType(String s)
举例
例如:输入的字符串是123.456,返回0 输入123a,返回-1 输入123.456d,返回0判断一个字符不是数字的时候,应该是if(!(s.charAt(i)>='0'&&s.charAt(i)<='9'))而不是if(s.charAt(i)<'0'&&s.charAt(i)>'9')),刚开始写错了,完全搞反了,汗。。。
写了一大堆代码,测试用例过了,但是提交上去,8个测试用例有两个未通过,说明肯定还是有问题的。。。
突然灵光一现,想到了系统自带的方法Double.parseDouble(String s)方法,于是再看看题,我就说呢,第一次做这个题的时候,题目下方显示 知识点:使用Double类自带的静态方法,当时我没懂,现在我想,不会真的是这样吧!于是代码如下:
public int NumType(String s) { if(s.length()==0||s==null) return -1; try{ double a=Double.parseDouble(s); return 0; }catch(Exception e){ return -1; }
}
还真的对了!长经验+1
4.判断自守数
-
自守数
-
如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数。
-
显然,5和6是一位自守数(5x5=25 6x6=36),25x25=625 76x76=5776,所以25和76是两位自守数。
刚开始一直有一个测试用例未通过,不知道什么原因,后来经大神指点,int num取平方之后,很可能超出了int的范围,因此需要用bigInteger
BigInteger n = new BigInteger(String.valueOf(num));
BigInteger a = n.multiply(n);这样做就对了,然后后面用字符串处理。
if(a%count==Math.abs(num)) //%不能用于两个BigInteger求模,可以用Mod(BigInteger m)来实现
//BigInteger也是引用类型变量,所以要用方法。
用long也可以
long square = (long) Math.pow(num, 2);
5.判断IP地址合法性
现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
现在需要你用程序来判断IP是否合法。
这道题网上都说用正则表示做,但是我没学正则表达式,而且IP地址的正则表达式实在太长了,听大神说,正则表达式能不用就不用,太慢了,先看正则表达式解法:
if(Pattern.matches( "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$",inputStr)) outputStr.append("YES"); else outputStr.append("NO");
话说这个正则表达式也未必完全对。。。
现在看我的String解法,遇到一个很奇怪的现象,
String s="192.168.0.0";
String[] ss=s.split("."); System.out.println(ss.length);这段程序的输出结果竟然是0.。。百思不得其解,,,
于是大神告诉我,“.”是特殊字符,代表任意字符,要转义,下面这样写就对了:
String s="192.168.0.0";
String[] ss=s.split("\\."); System.out.println(ss.length);输出结果为4
但是在用函数String.indexOf(".")的时候不用加\\,直接写就好了。。。