大数求余(String求余)

听朋友华为面试一道大数求余

    import java.math.BigInteger;  
    import java.util.Scanner;  
    //大数求余数  
    public class Qiuyu {  

        public static void main(String[] args) {  
            Scanner scanner = new Scanner(System.in);  

            try{  
                String str = scanner.nextLine();  
                scanner.close();  
                String[] strArr = str.split(" ");     
                BigInteger bigInteger = new BigInteger(strArr[0]);  
                BigInteger bigInteger01 = new BigInteger(strArr[1]);  
                System.out.println(bigInteger.remainder(bigInteger01));  
            }catch(Exception ex){  
                System.out.println("null");  
            }  
        }  

    }  

String类型求余的话:

import java.util.Scanner;

/**
 * Created by user on 2016/11/3.
 */
public class Jisuan {
    public static void main(String[] args) {
        Scanner sc1=new Scanner(System.in);
        String str1= sc1.next();
        Scanner sc2=new Scanner(System.in);
        String str2= sc2.next();
        System.out.println(remainder(str1, str2));
    }
//求和
    public static String add(String s1, String s2) {
        StringBuffer res = new StringBuffer();
        if (s1.contains("-") && s2.contains("-")) {
            res.append("-");
            s1 = s1.replace("-", "");
            s2 = s2.replace("-", "");
        } else if ((!s1.contains("-") && s2.contains("-"))) {
            return sub(s1, s2.replace("-", ""));
        } else if ((s1.contains("-") && !s2.contains("-"))) {
            return sub(s2, s1.replace("-", ""));
        }

        int len = Math.abs(s1.length() - s2.length());
        if (s1.length() > s2.length()) {
            s2 = castSame(s2, len);
        } else {
            s1 = castSame(s1, len);
        }
        int n = 0;
        for (int i = s1.length() - 1; i >= 0; i--) {
            int temp = (s1.charAt(i) - '0' + s2.charAt(i) - '0' + n);
            if (i == 0) {
                res.append(temp % 10).append(temp / 10 == 0 ? "" : temp / 10);
            } else {
                res.append(temp % 10);
                n = temp / 10;
            }
        }
        return kickZero(String.valueOf(res.reverse()));

    }
//求差
    public static String sub(String s1, String s2) {
        boolean flag = false;
        StringBuffer res = new StringBuffer();
        if (s1.contains("-") && s2.contains("-")) {
            return sub(s2.replace("-", ""), s1.replace("-", ""));

        } else if ((!s1.contains("-") && s2.contains("-"))) {
            return add(s1, s2.replace("-", ""));
        } else if ((s1.contains("-") && !s2.contains("-"))) {
            return "-" + add(s2, s1.replace("-", ""));
        }

        if (!isGreater(s1, s2)) {
            flag = true;
            String temp = s1;
            s1 = s2;
            s2 = temp;
        }
        s2 = castSame(s2, s1.length() - s2.length());
        int n = 0;
        for (int i = s1.length() - 1; i >= 0; i--) {
            Integer temp = s1.charAt(i) - '0' - s2.charAt(i) + '0' - n;

            temp = i == 0 ? (temp == 0 ? null : temp) : temp;
            res.append(temp == null ? "" : temp >= 0 ? temp : temp + 10);

            n = temp == null ? 0 : temp < 0 ? 1 : 0;

        }
        return kickZero(flag ? String.valueOf(res.append("-").reverse()) : String.valueOf(res.reverse()));
    }
//求余
    public static String remainder(String s1, String s2) {
        if ("0".equals(s2)) {
            return "ERROR";
        }
        if (!isGreater(s1, s2)) {
            return s1;
        }
        StringBuffer res = new StringBuffer();
        int n = s2.length();
        String temp = s1.substring(0, n);
        while (true) {
            int count = 0;
            System.out.println("n:" + n);
            while (sub(temp, s2).contains("-")) {
                temp += s1.charAt(n);
                n++;
            }
            while (true) {
                count++;
                temp = sub(temp, s2);
                if (sub(temp, s2).contains("-")) {
                    break;
                }
            }
            res.append(count);
            if (n >= s1.length()) {
                return temp;
            }
        }
    }
//判断大数
    public static boolean isGreater(String s1, String s2) {

        if (s1.length() > s2.length()) {
            return true;
        } else if (s1.length() < s2.length()) {
            return false;
        } else if (s1.length() == s2.length()) {
            int i = 0;
            while (i < s1.length()) {
                if (s1.charAt(i) < s2.charAt(i)) {
                    return false;
                } else if (s1.charAt(i) > s2.charAt(i)) {
                    return true;
                }
                i++;
            }
        }
        return true;

    }

    public static String castSame(String s, int len) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < len; i++) {
            sb.append("0");
        }
        s = String.valueOf(sb.append(s));
        return s;
    }

    public static String kickZero(String s) {
        int i = 0;
        while (s.length() > 1) {
            if ('0' == s.charAt(0)) {
                s = s.substring(1);
            } else {
                break;
            }
        }
        return s;

    }
}

你可能感兴趣的:(小知识点,Java)