华为OJ高精度数的加减法

import java.util.Scanner;

import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction;

public class Main {
    public static String add(String str1, String str2) {
        if (str1.length() < str2.length()) {
            String temp = str1;
            str1 = str2;
            str2 = temp;
        }
        int index = 0;
        int flag = 0;
        char[] result = new char[str1.length() > str2.length() ? str1.length()
                : str2.length()];
        while (str1.length() > index && str2.length() > index) {
            int sum = str1.charAt(str1.length() - index - 1)
                    + str2.charAt(str2.length() - index - 1) - '0' + flag;
            if (sum > '9') {
                result[result.length - index - 1] = (char) (sum - 10);
                flag = 1;
            } else {
                result[result.length - index - 1] = (char) sum;
                flag = 0;
            }
            index++;
        }
        if (str1.length() >= index) {
            for (int i = index; i < str1.length(); i++) {
                int sum = str1.charAt(str1.length() - index - 1) + flag;
                if (sum > '9') {
                    result[result.length - index - 1] = (char)(sum - 10);
                    flag = 1;
                }else {
                    result[result.length - index - 1] = (char)(sum);
                    flag = 0;
                }

                index++;
            }
        }
        if (flag == 1) {
            return "1" + new String(result);
        }else {
            return new String(result);
        }

    }

    public static String subtract(String str1, String str2){
        String sign = "";
        if (str1.length() < str2.length()) {
            String temp = str1;
            str1 = str2;
            str2 = temp;
            sign = "-";
        }else if (str1.length() == str2.length()) {
            if (str1.compareTo(str2)<0) {
                String temp = str1;
                str1 = str2;
                str2 = temp;
                sign = "-";
            }
        }
        int index = 0;
        int flag = 0;
        char[] result = new char[str1.length()>str2.length()?str1.length():str2.length()];
        while (str1.length()>index && str2.length()>index) {
            int sum = str1.charAt(str1.length()-index-1)-str2.charAt(str2.length()-index-1)+'0' - flag;
            if (sum<'0') {
                flag = 1;
                result[result.length-index-1] = (char)(sum + 10);
            }else {
                flag = 0;
                result[result.length-index-1] = (char)(sum);
            }
            index++;
        }
        if (str1.length()>=index) {
            for (int i = index; i < str1.length(); i++) {
                int sum = (char)(str1.charAt(str1.length()-index-1)-flag);
                if (sum<'0') {
                    result[result.length-index-1] = (char)(sum+10);
                    flag = 1;
                }else {
                    result[result.length-index-1] = (char)sum;
                    flag = 0;
                }
                index++;
            }
        }
        return sign + new String(result);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str1 = scanner.next();
        String str2 = scanner.next();
        if (str1.contains("-") && str2.contains("-")) {
            System.out.println("-"
                    + add(str1.substring(1), str2.substring(1)));
        } else if (!str1.contains("-") && !str2.contains("-")) {
            System.out.println(add(str1, str2));
        } else {
            String result = "";
            if (str1.contains("-")) {
                result = subtract(str2,str1.substring(1)).replace("0", "");
                if (result.length() == 0) {
                    result = "0";
                }
                System.out.println(result);
            } else {
                result = subtract(str1, str2.substring(1)).replace("0", "");
                if (result.length() == 0) {
                    result = "0";
                }
                System.out.println(result);
            }
        }

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值