java 拆两个字符串进行相加

场景要求:
例如 String a1=“33333333333333333333344”;
String a2=“98736374848595499383929384”;
两个数相加没有一个可以把这两个数转成整形时候。
实现以下代码的思路:
//先进行截取,把两个数截成3部分(相当于3个数)
//让截取的相同部分的每一位进行相加
//最后在把相同部分相加的结果与截取的第三部分相加,
//其中会涉及相同部分最大项相加结果大于一的情况,会对此处做处理,
//方法为截取的部分最小位直接加一,
//加完一后还会涉及最小为是否大于10

public static String getSum(String s1,String s2){
		int a4=0,a2 = 0;
		String b33="",cc9 ="",jie;//变量 替换保证大小转换时候存在的问题
		List l1 = new ArrayList(),l2 =new ArrayList();
		if(s1.length()<s2.length()){
			cc9= s2;
			s2 = s1;
			s1 = cc9;
		}
	    if(s1.length()>s2.length()){
	    	jie = s1.substring(0, s1.toCharArray().length-s2.toCharArray().length>=0?s1.toCharArray().length:s2.toCharArray().length-s1.toCharArray().length-s2.toCharArray().length>=0?s2.toCharArray().length:s1.toCharArray().length);
	    }else{
	    	jie = s2.substring(0, Math.abs(s1.toCharArray().length-s2.toCharArray().length>=0?s1.toCharArray().length:s2.toCharArray().length-s1.toCharArray().length-s2.toCharArray().length>=0?s2.toCharArray().length:s1.toCharArray().length-1));
	    }
			for(int i =0;i<(s1.toCharArray().length-s2.toCharArray().length>=0?s2.toCharArray().length:s1.toCharArray().length);i++){
				int c =Integer.parseInt(String.valueOf(s2.toCharArray()[(s2.length()-i-1)]))+Integer.parseInt(String.valueOf(s1.toCharArray()[(s1.length()-i-1)]))+a2;
				a2 = 0;
				if(c>=10){
					l1.add(c%10);//取于放入。
					if((s1.toCharArray().length-s2.toCharArray().length>=0?s2.toCharArray().length:s1.toCharArray().length)-i-1==0){
						l1.add(1);
						a4 = 1;
					}
					a2 = 1;
				}else{
					l1.add(c);
				}
			}
			//长度不相等时候触发次   功能  是将截取的前半部份与1相加放入一个新的集合   
			//最后会把两个集合整合在一起 
            if(s2.length()!=s1.length()){
            	if(a4 == 1){
            		int a5=1;
    				for(int i =0;i<jie.length();i++){
    					if(a5==1){
        					int c =Integer.parseInt(String.valueOf(jie.toCharArray()[(jie.length()-i-1)]))+1+a2;
        					l1.remove(l1.size()-1);
        					a5=0;
    					}
    					int c =Integer.parseInt(String.valueOf(jie.toCharArray()[(jie.length()-i-1)]))+a2;
    					a2 = 0;
    					if(c>=10){
    						l2.add(c%10);//取于放入。
    						if(jie.length()-i-1==0){
    							l2.add(1);
    						}
    						a2 = 1;
    					}else{
    						l2.add(c);
    					}
    				}	
    				l1.add(l2);
    			}else{
    				l2.add(jie);
    				l1.add(l2);
    			}
            }		
		for(int b1 =0;b1<l1.toString().split(",").length;b1++){
			b33+=l1.toString().split(",")[l1.toString().split(",").length-1-b1];
		}
		return b33.replace("[", "").replace(" ", "").replace("]", "");
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值