java 实现 不限长整形字符串 相加

/**
	 * 长整形str 相加计算
	 * @param b
	 * @param p
	 * @param 进制 不能出现字母
	 * @return
	 */
	private static String add(char [] b,char [] p,int flag) {
		   int temp = 0;
		   int total = 0;
		   List<Integer> ls = new ArrayList<Integer>();
		   // 将较长的字符整数存入list
		   if(b.length>p.length)
		   {
			   for(int i=0;i<b.length;i++)
			   {
				   ls.add(i, Integer.parseInt(b[b.length-1-i]+""));
			   }
		   }
		   else
		   {
			   for(int i=0;i<p.length;i++)
			   {
				   ls.add(i, Integer.parseInt(p[i]+""));
			   }
		   }
		   int j = 0;
		   // 相加直到较短的数加完
		   for(int i=0;i<b.length&&i<p.length;i++)
		   {
			   total = Integer.parseInt(b[b.length-i-1]+"")+Integer.parseInt(p[p.length-i-1]+"")+temp;
			   if(total>=flag)
			   {
				   ls.set(i, total%flag);
				   temp = 1;
			   }
			   else
			   {
				   ls.set(i,total);
				   temp = 0;
			   }
			   j++;
		   }
		   // 加完存在进位
		   if(temp>0)
		   {
			   // 继续与list相加知道进位为0
			   for(int i=j;i<ls.size();i++)
			   {
				   if(ls.get(i) + temp>flag)
				   {
					   ls.set(i,(ls.get(i) + temp)%flag);
					   temp = 1;
				   }
				   else
				   {
					   ls.set(i,ls.get(i)+temp);
					   temp = 0;
					   break;
				   }
				     
			   }
			   // 加完任有进位list进一位
			   if(temp>0)
			   {
				   ls.add(1);
			   }
		   }
		   
		   StringBuilder sb = new StringBuilder();
		   // 反转list 输出
		   for(int i=0;i<ls.size();i++)
		   {
			   sb.append(ls.get(ls.size()-i-1));
		   }
		   return sb.toString();
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值