public String sum(String first,String second){
Map<String,char[]> firstMap = this.subString(first);
Map<String,char[]> secondMap = this.subString(second);
StringBuilder result = new StringBuilder();
Stack<String> sums = new Stack<>();
firstMap.entrySet().stream().sorted(Map.Entry.<String, char[]>comparingByKey().reversed()).forEachOrdered(entry->{
String subFirst = String.copyValueOf(entry.getValue());
String subSecond = String.copyValueOf(secondMap.get(entry.getKey()));
//判断是否是最后一次,最后一次不去除
if(entry.getKey().equals("0")){
sums.add(this.addString(subFirst,subSecond,-1));
}else {
sums.add(this.addString(subFirst,subSecond,CARRYUNTIL.getCarry()));
}
});
while (!sums.empty()){
result.append(sums.pop());
}
return result.toString();
}
//对数据进行分割
private Map<String,char[]> subString(String numberString){
Map<String,char[]> stringMap = new LinkedHashMap<>();
for(int i =0 ;i < numberString.length() ; i= i+10){
stringMap.put(i+"",numberString.substring(i,i+10).toCharArray());
}
return stringMap;
}
//对分割数据进行计算
private String addString(String s1,String s2,Integer carry){
String result = Long.valueOf(s1)+Long.valueOf(s2)+carry +"";
if(result.length()>s1.length() && carry != -1){
CARRYUNTIL.carry();
result = result.substring(1);
}else {
CARRYUNTIL.reset();
}
return result;
}
//进位工具类
static class CARRYUNTIL{
private static Integer i = new Integer(0);
public static void carry(){
i = 1;
}
public static void reset(){
i = 0;
}
public static int getCarry(){
return i;
}
}
写一个函数,计算两个1000000位长的正整数相加的值
最新推荐文章于 2024-10-10 23:42:47 发布