博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
华为机试题
阅读量:5240 次
发布时间:2019-06-14

本文共 2604 字,大约阅读时间需要 8 分钟。

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(".")的时候不用加\\,直接写就好了。。。

 

转载于:https://www.cnblogs.com/berylqliu/p/6261503.html

你可能感兴趣的文章
PyCharm设置
查看>>
MySQL服务器与MySQL57服务器区别与不同处在哪里,他们各自的领域范围,能不能同时启动服务?...
查看>>
type="button"和type="submit"的区别
查看>>
欢迎来的我的前端技术博客
查看>>
DB2同平台迁移数据库
查看>>
sql编程
查看>>
kubernetes实战(四):k8s持久化安装rabbitmq集群
查看>>
SQL优化SQL tuning
查看>>
微信小程序——获取openid
查看>>
数据导入导出、备份恢复
查看>>
毕业设计10-21星期六
查看>>
$.ajax
查看>>
Redhat PXE服务器配置-待验证
查看>>
Java Exception 和Error
查看>>
python库学习笔记(re库)
查看>>
Spring多数据源的配置和使用
查看>>
算法总结之 删除链表的中间节点和a/b处的节点(链表中间节点的重要思想)
查看>>
1.类的两种创建方式(通过元类创建类)
查看>>
使用promisify来流程化异步操作
查看>>
采用CAS原理构建单点登录
查看>>