A+B(大数)

Problem Description

给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。

Input

输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。

Output

请计算A+B的结果,并以正常形式输出,每组数据占一行。

Sample Input

-234,567,890 123,456,789
1,234 2,345,678

Sample Output

-111111101
2346912

分析:这道题目用java显然比C或c++简单的多,注意混合加减法,其实就是大数算法的灵活运用。
AC源代码(Java语言):
import java.util.Arrays;
import java.util.Scanner;

public class Main{
//    public final static double pi = 3.1415927;
    public static void main(String[] args) {
        
        Scanner sin=new Scanner(System.in);
        while(sin.hasNext()){
            String init = null;
            String result = null;
            
            int val = 0;
            init = sin.nextLine();
            String arr[] = init.split(" ");
            String arra = arr[0].replace(",", "");
            String arrb = arr[1].replace(",", "");
            if(arra.startsWith("-")||arrb.startsWith("-")){
                if(arra.startsWith("-")&&arrb.startsWith("-")){
                    arra = arra.replace("-", "");
                    arrb = arrb.replace("-", "");
                    result = bigNumberAdd(arra, arrb);
                    System.out.println("-"+result);
                }else{
                    if(arra.startsWith("-")){
//                        System.out.println("*****");
                        arra = arra.replace("-", "");
                        result = bigNumberSub(arrb, arra);
                    }else{
                        arrb = arrb.replace("-", "");
                        result = bigNumberSub(arra, arrb);
                    }
                    System.out.println(result);
                }
            }else{
                result = bigNumberAdd(arra, arrb);
                System.out.println(result);
            }
        }
    }
    static String bigNumberAdd(String f, String s) {  
        char[] a = new StringBuffer(f).reverse().toString().toCharArray();  
        char[] b = new StringBuffer(s).reverse().toString().toCharArray();  
        int lenA = a.length;
        int lenB = b.length;
        int len = lenA > lenB ? lenA : lenB;  
        int[] result = new int[len + 1];
        for (int i = 0; i < len + 1; i++) {
            int aint = i < lenA ? (a[i] - '0') : 0; 
            int bint = i < lenB ? (b[i] - '0') : 0;  
            result[i] = aint + bint;
        }
//        for(int i=0; i<result.length; i++){
//            System.out.print(result[i]+" ");
//        }
        for (int i = 0; i <result.length; i++) {
            if (result[i] >= 10) {
                result[i + 1] += result[i] / 10;
            }
            result[i] = result[i] % 10;
        }
//        System.out.println();
//        for(int i=0; i<result.length; i++){
//            System.out.print(result[i]+" ");
//        }
//        System.out.println();
        StringBuffer sb = new StringBuffer();
        boolean flag = true;  
        for (int i = len; i >= 0; i--) {
            if (result[i] == 0 && flag) {
                continue;
            } else {
                flag = false;
            }
            sb.append(result[i]);  
        }
        if (sb.toString().equals("")) {  
            sb.append("0");  
        }
        return sb.toString();  
    }
    public static String bigNumberSub(String f, String s) {
//        System.out.println(f);
//        System.out.println(s);
        char[] a = new StringBuffer(f).reverse().toString().toCharArray();  
        char[] b = new StringBuffer(s).reverse().toString().toCharArray();  
        int lenA = a.length;
        int lenB = b.length;
//        System.out.println("lena="+lenA+",lenb="+lenB);
        int len = lenA > lenB ? lenA : lenB;  
        int[] result = new int[len];
        char sign = '+';
        if (lenA < lenB) {  
            sign = '-';
        } else if (lenA == lenB) {  
            int i = lenA - 1;  
            while (i > 0 && a[i] == b[i]) {
                i--;  
            }
            if (a[i] < b[i]) {
                sign = '-';
            }
        }
        for (int i = 0; i < len; i++) {  
            int aint = i < lenA ? (a[i] - '0') : 0;  
            int bint = i < lenB ? (b[i] - '0') : 0;  
            if (sign == '+') {  
                result[i] = aint - bint;  
            } else {
                result[i] = bint - aint;  
            }  
        }
//        for(int i=0; i<len; i++){
//            System.out.print(result[i]+" ");
//        }
        for (int i = 0; i < result.length - 1; i++) {  
            if (result[i] < 0) {  
                result[i + 1] -= 1;  
                result[i] += 10;  
            }  
        }  
  
        StringBuffer sb = new StringBuffer();
        if (sign == '-') {  
            sb.append('-');  
        }
        boolean flag = true;  
        for (int i = len - 1; i >= 0; i--) {  
            if (result[i] == 0 && flag) {  
                continue;  
            } else {  
                flag = false;  
            }  
            sb.append(result[i]);  
        }
        if (sb.toString().equals("")) {  
            sb.append("0");  
        }
//        System.out.println(sb.toString()); 
        return sb.toString();  
    }  
}
View Code

 

转载于:https://www.cnblogs.com/hey-man/p/6833214.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值