1. 两个整数求和
String a = "893333.....3333";
String b = "349......999";
求 a + b;
由于数字太长,只能存在String 里,不能整体转成int/long来加,只能一位一位的转成int来加,注意进位。
用一个for循环按每一位做加法,最后输出到一个String里。
/**
* 如何将char类型的数字转换成int型的数字
* StringBuffer 追加时,可以 在前面 追加吗
* @param a
* @param b
* @return
*/
public static String sumLargeInt(String a,String b){
char[] a1 = a.toCharArray();
char[] a2 = b.toCharArray();
int i1 = a1.length;
int i2 = a2.length;
int i11 = 0;//记录每次取出来的数
int i22 = 0;//
StringBuffer sb = new StringBuffer();
int shi = 0;//记录十位
for (int i = 0; i < (i1>i2?i1:i2); i++) {
int t1 = i1 - i - 1;
int t2 = i2 - i - 1;
if(t1>=0){
i11 = a1[t1] - '0';
}else{
i11 = 0;
}
if(t2>=0){
i22 = a2[t2] - '0';
}else{
i22 = 0;
}
System.out.println(i11 + " " + i22);
int temp = i11 + i22 + shi;
if(temp>=10){
sb.insert(0, temp%10);
shi = 1;
}else{
sb.insert(0,temp);
shi = 0;
}
}
//当时没有考虑到这种情况 两个数位数相等的时候, 在进一位没有考虑到
if(shi>0){
sb.insert(0,shi);
}
return sb.toString();
}
2. 一个字符串去重,输出结果保持顺序。
举例:输入 String a = "ABCCC";
输出 deduplicate(a) = "ABC";
输入 String a = "abbbcdeffffgacde";
输出 deduplicate(a) = "abcdefg";
/**
* 用 LinkedHashMap 对字符串去重
* @param str
* @return
*/
private static String test(String str) {
Map<Object,Object> maps = new LinkedHashMap();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char charAt = str.charAt(i);
if(!maps.containsValue(charAt)){
System.out.println(charAt);
maps.put(charAt, charAt);
};
}
Set<Object> keySet = maps.keySet();
for (Object string : keySet) {
sb.append(string);
}
return sb.toString();
}