算法题1@TOC
字符串计算输出
###某团1面最后出的算法题,没完成,大意了,到了饭点,会议室被其他童靴预约拿去吃午饭了,1h的面试就这么草草收场了,ps:hr提前说会比较基础,面试前,楼猪闭关刷了3天corejava jvm io 多线程 结果就问了一丢丢就去问项目和框架了
#####下面的算法写的比较low 记录我的算法之路吧 白天看链表的算法真是看得头大
public static void main(String[] args) {
System.out.println(add(“91323455611”,“21923955617”));
}
private static String add(String a, String b) {
//先以字符的列表读到两个变量 int[] aArray ,bArray
//先以字符的列表读到两个变量 int[] aArray ,bArray
int al=a.length();
int bl=b.length();
char[] longA,shortA,retA ;
int lSize,sSize = 0;
if(al>bl){
longA = a.toCharArray();
shortA = b.toCharArray();
lSize=al;
sSize=bl;
}else{
longA = b.toCharArray();
shortA = a.toCharArray();
lSize=bl;
sSize=al;
}
//这里需要判断哪个str最长
int rSize=lSize;
if(longA[0]+shortA[0]>10&&lSize==sSize){
//如果不在这里扩展
rSize++;
}
char[] charsR = new char[rSize];
boolean addFlag=false;
for(int i=1;i<=lSize;i++){
int ret ;
if(i>sSize){
if(addFlag){
ret=(longA[lSize-i]-'0')+1;
addFlag=false;
}else {
ret=(longA[lSize-i]-'0');
}
charsR[rSize-i]=(char)(ret+48);
continue;
}
//减去'0'是为了让转成int的时候能正常计算,当然 也能在ret-96一样的效果
ret = (longA[lSize-i]-'0')+(shortA[sSize-i]-'0');
if(addFlag){
//需要先+1
ret++;
}
if(ret/10>0){
addFlag=true;
}else{
//复位
addFlag=false;
}
//这里还要还原 不然会打印的是乱码
charsR[rSize-i]=(char)(ret%10+48);
}
if(addFlag&&lSize==sSize){
charsR[0]='1';
}
return new String(charsR);7
}