忙啊忙,博客依旧空空荡荡,从别的地方copy,都懒得弄~~
最近去了某家网络公司面试,最后一道题仔细揣摩一下,描述的不是很清楚,两个整数,是从左边开始加还是右边呢?我只能用程序去“呵呵”了。
上图:
当时手写的比较乱,回来重新整理一下:
public class StringNumberAdd {
private static boolean sort = true; //字符串是否从左开始相加,false是从左边开始,true是从右边开始
public static void main(String[] args) {
String num1 = "12345678123123";
String num2 = "111111111";
if(sort){
System.out.println(add(num1,num2).reverse());
}else{
System.out.println(add(num1,num2));
}
}
public static StringBuilder add(String num1,String num2){
int a[] = toIntArray(sort,num1,num1.length());
int b[] = toIntArray(sort,num2,num2.length());
int count = 0;
int flag = 0;
if(a.length>b.length){
count = a.length;
flag = 1;
}else{
count = b.length;
flag = 2;
}
return fill(flag,a,b,count);
}
public static int[] toIntArray(boolean sort,String num,int length){
int temp[] = new int[length];
for (int i = 0; i < num.length(); i++) {
int number = 0;
if(sort){
number = Character.getNumericValue(num.charAt(num.length()-(i+1)));
}else{
number = Character.getNumericValue(num.charAt(i));
}
temp[i] = number;
}
return temp;
}
public static StringBuilder fill(int flag,int a[],int b[],int count){
int temp = 0;
StringBuilder sb = new StringBuilder();
switch (flag) {
case 1:
for (int i = 0; i < count; i++) {
if(i>=b.length){
temp = a[i];
}else{
temp = a[i] + b[i];
}
sb.append(temp);
}
break;
case 2:
for (int i = 0; i < count; i++) {
if(i>=a.length){
temp = b[i];
}else{
temp = a[i] + b[i];
}
sb.append(temp);
}
break;
}
return sb;
}
}
只要自己按照思路写出意思即可,不必按照上述代码编码,感觉上述代码有些冗余,比如case代码块~~~
考你的思路大致就是:
字符串拆开成一个 int[ ] 数组,然后按照一位一位的相加。
至于是从左还是右,你也呵呵一下吧~~~想尝试找mathout推荐的工作,考这玩意有鸟用?