华为OJ——超长正整数相加

题目描述

  请设计一个算法完成两个超长正整数的加法。

  • 接口说明

    /*
    请设计一个算法完成两个超长正整数的加法。
    输入参数:
    String addend:加数
    String augend:被加数
    返回值:加法结果
    */
    public String AddLongInteger(String addend, String augend)
    {
    /在这里实现功能/

    return null;
    }

  • 输入描述:
    输入两个字符串数字

  • 输出描述:
    输出相加后的结果,string型

  • 示例1
    输入
    99999999999999999999999999999999999999999999999999
    1
    输出
    100000000000000000000000000000000000000000000000000

实现代码:

package cn.c_shuang.demo75;

import java.util.Scanner;
/**
 * 超长正整数相加
 * @author Cshuang
 *
 */
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            String a=in.next();
            String b=in.next();
            add(a,b);
        }
        in.close();
    }

    private static void add(String a, String b) {
        char[]ch1=a.toCharArray();
        char[]ch2=b.toCharArray();
        int c=0;//进位
        int len1=ch1.length;
        int len2=ch2.length;
        int temp = 0;
        StringBuilder sb=new StringBuilder();
        while(len1>0&&len2>0){
            temp = ch1[len1-1]-'0'+ch2[len2-1]-'0'+c;
            if(temp>=10){
                c=temp/10;
                temp%=10;
            }else
                c=0;
            sb.append(temp);
            len1--;
            len2--;
        }
        int resLen=len1==0?len2:len1;//多于的部分
        char[] resCh=len1==0?ch2:ch1;
        while(resLen>0){
            temp=resCh[resLen-1]-'0'+c;
            if(temp>=10){
                c=temp/10;
                temp%=10;
            }else
                c=0;
            sb.append(temp);
            resLen--;
        }
        if(c!=0)
            sb.append(c);
        System.out.println(sb.reverse().toString()); 
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值