超长正整数相加

请设计一个算法完成两个超长正整数的加法。
输入参数:
String addend:加数
String augend:被加数
返回值:加法结果
思路:两个数相加,可先将两个数长度对齐,短的用0补齐后再计算。两个数相加的结果长度至多为较大的数长度加1。可以用一个数组来存放结果。

public class Main {
    public static void main(String[] args) {
        System.out.println(new Main().AddLongInteger("99999999999999999999999999999999999999999999999999", "11111111111111111111111"));
    }
    public String AddLongInteger(String addend, String augend){
     int l_add = addend.length();
     int l_aug = augend.length();
     int len = l_add>l_aug?l_add:l_aug;
     int zeros = l_add>l_aug?l_add-l_aug:l_aug-l_add;
     /*
      * 被加数与加数补齐长度至相同
      */
     if(l_add>l_aug){
         for(int i = 0;i<zeros;i++){
             augend = "0"+augend;
         }
     }else {
         for(int i = 0;i<zeros;i++){
             addend = "0"+addend;
         }
    }
     l_add = addend.length();
     /*
      * 存放结果,两个长度分别为n,m的数相加结果长度不会超过Max(n,m)+1,
      */
     int[] result = new int[len+1];
     int k = 0;
     /*
      * G,个位;S,十位。
      */
     int G,S;
     for(int i = l_add-1;i>=0;i--){
             int temp = Integer.parseInt(addend.substring(i,i+1))+Integer.parseInt(augend.substring(i,i+1));
             result[k]+=temp;
             G = result[k]%10;
             S = result[k]/10;
             result[k] = G;
             result[k+1]+=S;
             k++;
     }
     boolean flag = true;
     StringBuilder sb = new StringBuilder();
     for(int i = result.length-1;i>=0;i--){
         if(result[i]==0&&flag == false){
             continue;
         }else
             {
             flag = true;
             sb.append(result[i]);
         }

     }

  return sb.toString();     
 }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值