Java算法面试题及答案

/**
	 * 两个无穷大的数字相加
	 * @param param1 无穷大数字1
	 * @param param2无穷大数字2
	 * @return 两个无穷大的数字相加之后的无穷大值
	 */
	public static int[] add(int[] param1,int[] param2) {
		int length = param1.length > param2.length ? param1.length : param2.length;
		//创建一个无穷大数字计算结果存放
		int[] result = new int[length];
		int i = 0;
		//每个位的数字相加
		while (i < param1.length && i < param2.length) {
			result[length-i-1] = param1[param1.length-i-1] + param2[param2.length-i-1];
			i++;
		}
		//当如果param1大于param2时取param1的前几位数字,否则相反
		if (param1.length > param2.length) {
			while(i < param1.length) {
				result[length-i-1] = param1[length-i-1];
				i++;
			}
		} else if (param2.length > param1.length) {
			while(i < param2.length) {
				result[length-i-1] = param2[length-i-1];
			}
		}
		//处理进位情况,如果位数大于等于10,那么前一位则加1并且该位减去10
		for (int k = length -1;k > 0; k--) {
			if (result[k] >= 10) {
				result[k-1] = result[k-1] + 1;
				result[k] = result[k] - 10;
			}
		}
		//如果第一位大于等于10时也需要处理
		if (result[0] >= 10) {
			int[] temp = new int[length+1];
			temp[0] = 1;
			temp[1] = result[0] - 10;
			for (int j = 1;j < length; j++) {
				temp[j+1] = result[j];
			}
			result = temp;
		}
		return result;
	}
	/**
	 * 字符串反转
	 * @param param 待反转的字符串
	 * @return 反转之后的字符串
	 */
	public static String inversion(String param) {
		Stack<String> stack = new Stack<String>();
		StringBuffer sb = new StringBuffer();
		for (int i = 0;i < param.length();i++) {
			stack.push(param.substring(i,i+1));
		}
		while(!stack.isEmpty()) {
			sb.append(stack.pop());
		}
		return sb.toString();
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值