华为机试题:超长正整数相加

描述:
题目描述:请设计一个算法完成两个超长正整数的加法。
要求实现函数:
void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult);
输入参数:
char * pcAddend:加数
char * pcAugend:被加数
char * pcAddResult:加法结果
返回值:无
运行时间限制: 1 Sec
内存限制: 128 MByte
输入:
两个超长正整数的字符串
输出:
相加后结果的字符串
样例输入:
123456789123456789 123456789123456789
样例输出:
246913578246913578

我的答案(Java):

import java.util.Scanner;

public class Main{

    private String a;//
    private String b;
    /**
     * 输入
     */
    public void input(){
        Scanner sc=new Scanner(System.in);
        try {
            a=sc.next();// 加数
            b=sc.next();// 被加数
        } catch (Exception e) {
            a=null;
            b=null;
        }finally{
            sc.close();
        }
    }
    public String AddLongInteger(String a,String b){
        String result="0";
        int carry=0;
        int len1=a.length();
        int len2=b.length();
        int len=Math.max(len1, len2);
        for(int i=0;i<len;i++){
            try{
                // 加数取一位
                int num1=0;
                int idx1=len1-i-1;
                if(idx1>-1){
                    num1=Integer.parseInt(a.substring(idx1, idx1+1));
                    if(num1==0)
                        return null;
                }

                // 被加数取一位
                int num2=0;
                int idx2=len2-i-1;
                if(idx2>-1){
                    num2=Integer.parseInt(b.substring(idx2, idx2+1));
                    if(num2==0)
                        return null;
                }

                // 判断结果中是否包含进位
                int idx3=0;
                if(carry>0){
                    idx3=1;
                }
//              System.out.println("num1="+num1+" num2="+num2+" result="+result);
                int tempResult=num1+num2+carry;

                carry = tempResult >= 10 ? 1 : 0;// 新的进位

                if(result.equals("0"))
                    result=tempResult+"";
                else{
                    result=tempResult+result.substring(idx3, result.length());
                }
            }catch(Exception e){
//              e.printStackTrace();
                return null;
            }
        }
        return result;
    }
    public static void main(String[] args){
        Main m=new Main();
        m.input();
        if(m.a==null||m.b==null){
            return;
        }
        String result=m.AddLongInteger(m.a, m.b);
        if(result!=null){
            System.out.println(result);
        }
    }
}

test1测试没有通过,我还没发现问题在哪儿,请高手指点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值