亚信校招在线笔试,编程题

前两天做了亚信的校招在线笔试,前面都是选择题,涉及的范围还是挺广的,Java基础、算法、数据结构、前端都有,但不是都特别难,最后有两道编程题都没写出来,真的是手生了,都比较简单,也不难,只是在线笔试是纯手打,没有IDE的加持,真的不行了;今天闲着没事,处理一下这两道题。

1.第一题是一个方法,入参int i,i是小于20的一个数,返回值为String,方法描述,求n!,比如输入5,输出是120。

思路

这题其实不难,就一点20!结果是18位数,已经超过int的最大值范围了,应该采用long型来处理,返回时String处理一下就可以,如果有更过分的要求,返回值超过long类型的最大值时,考虑用java.math.*下面的BigInteger、BigDecimal,这两个类时java用来处理大数字的,不过它们的加减乘除得用方法来,想手撕代码有那么点难度。
看下是实现,循环一下就OK了`

public static String factorial(int i) {
		//定义结果变量
		long result = 1;
		//定义循环次数,就是多少次乘法了
		int times = i - 1;
		for (int j = 0; j < times; j++) {
			//1*n*(n-1)*...*2 就是从后往前乘
			result *= i--;
		}
		return "" + result;
	}

第二题是翻转字符串,入参String(例:can you help me),输出是(me help you can)

思路

第一想法,分割字符转放到数组里,然后把数字翻转一下,在从头拼接一下,当然你也可以不用翻转字符串数组,直接从末尾开始拼接,看个人爱好。
下面是实现

public static String reverse(String str) {
		//分割字符转
		String[] strArray = str.split(" ");
		//定义字符串数组头尾脚标
		int head = 0;
		int tail = strArray.length - 1;
		//翻转里面的元素
		for (int i = 0; i < strArray.length / 2; i++) {
			String temp = strArray[head];
			strArray[head] = strArray[tail];
			strArray[tail] = temp;
			head++;
			tail--;
		}
		//用StringBuffer来拼接结果,顺便加一下空格,最后一个就不需要了
		StringBuffer result = new StringBuffer();
		for (int i = 0; i < strArray.length; i++) {
			result.append(strArray[i]);
			if (i < strArray.length - 1) {
				result.append(" ");
			}
		}
		return result.toString();
	}

当然了,我的代码很懒,望各位大佬包含。

你可能感兴趣的:(JAVA)