您的位置:首页 > 职场人生

面试被虐题— 谨以此致,mark一个悲惨的下午

2016-03-11 10:17 211 查看

BGM

昨天去一家公司面试,被面试官从技术层面虐翻。谨以此致mark自己的不足。

废话少说,开虐!!!

1, 手写两个超大数相加

注: 两个数的位数超出计算机系统的int值内存范围。

过程:

大体的思路是这样:

1,既然超出int的范围,那么我们用字符串来存储数字。

2,基本的解决思路,按对应位相加,(必须考虑进位)。

3,考虑边界值eg:进位,正负号。

贴一个没有考虑正负号的java代码,大家共勉:

转自一篇博客

public class BigNumSum {
public static void main(String[] args) {
int[] result = bigNumSum("999999999999999", "99999999999999999");
for(int i=0; i < result.length; i++) {
System.out.print(result[i]);
}
}

public static int[] bigNumSum(String num1, String num2) {
String number1 = num1;
String number2 = num2;
char[] ch1 = number1.toCharArray();
char[] ch2 = number2.toCharArray();
int[] sum;
int len = Math.abs(ch1.length - ch2.length);
boolean flag = false; //为true时表示两数相加>=10

if(ch1.length == ch2.length) { //如果两个数的长度相等
sum = new int[ch1.length+1]; //相加结果的长度为任一长度+1,因为最高位相加可能>10

for(int i=ch1.length-1; i>=0; i--) { //从个位开始相加
if(flag) {
sum[i+1] = (int)(ch1[i] - '0') + (int)(ch2[i] - '0') + 1;
}
else {
sum[i+1] = (int)(ch1[i] - '0') + (int)(ch2[i] - '0');
}
flag = handleSumOverTen(sum, i, len); //处理两数相加是否>10
}

handleTopDigit(flag, sum); //处理最高位
return sum;
}
else if(ch1.length > ch2.length) { //如果数1的长度大于数2的长度
sum = new int[ch1.length+1]; //结果的长度为数1的长度+1

for(int i=ch2.length-1; i>=0; i--) {
if(flag) {
sum[i+len+1] = (int)(ch1[i+len] - '0') + (int)(ch2[i] - '0') + 1;
}
else {
sum[i+len+1] = (int)(ch1[i+len] - '0') + (int)(ch2[i] - '0');
}

flag = handleSumOverTen(sum, i, len);
}

for(int i=ch1.length-ch2.length-1; i>=0; i--) { //处理数1多出来的位数
if(flag) {
sum[i+1] = (int)(ch1[i] - '0') + 1;
}
else {
sum[i+1] = (int)(ch1[i] - '0');
}
flag = handleSumOverTen(sum, i, 0);
}

handleTopDigit(flag, sum);
return sum;
}
else {
sum = new int[ch2.length+1];

for(int i=ch1.length-1; i>=0; i--) {
if(flag) {
sum[i+len+1] = (int)(ch1[i] - '0') + (int)(ch2[i+len] - '0') + 1;
}
else {
sum[i+len+1] = (int)(ch1[i] - '0') + (int)(ch2[i+len] - '0');
}

flag = handleSumOverTen(sum, i, len);
}

for(int i=ch2.length-ch1.length-1; i>=0; i--) {
if(flag) {
sum[i+1] = (int)(ch2[i] - '0') + 1;
}
else {
sum[i+1] = (int)(ch2[i] - '0');
}
flag = handleSumOverTen(sum, i, 0);
}

handleTopDigit(flag, sum);
return sum;
}
}

/*
* 处理两数相加是否>10
*/
public static boolean handleSumOverTen(int[] sum, int i, int len) {
boolean flag = false;
if(sum[i+len+1] >= 10) {
sum[i+len+1] = sum[i+len+1] - 10;
flag = true;
}
else {
flag = false;
}
return flag;
}

/*
* 处理最高位
*/
public static void handleTopDigit(Boolean flag, int[] sum) {
if(flag) {
sum[0] = 1;
}
else {
sum[0] = 0;
}
}
}


此题思路我说的对,但是重点考察你的代码,代码0分。

2, iOS 系统键盘和搜狗键盘互相切换的问题

ps: 这个真没有处理过。

先写到这,还有东西要做,回头来更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: