1. 程式人生 > >java-1017 A除以B

java-1017 A除以B

本題要求計算 A/B,其中 A 是不超過 1000 位的正整數,B 是 1 位正整數。你需要輸出商數 Q 和餘數 R,使得 A=B×Q+R 成立。

輸入格式:

輸入在一行中依次給出 A 和 B,中間以 1 空格分隔。

輸出格式:

在一行中依次輸出 Q 和 R,中間以 1 空格分隔。

輸入樣例:

123456789050987654321 7

輸出樣例:

17636684150141093474 3

 

老樣子,獲取資料先:

public static String[] getData() throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        return bufferedReader.readLine().split(" +");
    }

獲取成為一個長度為2的String陣列

之後我們進行處理:我們將獲取到的資料進一步的轉化為被除數和除數。然後...進行某種處理/xyx

public static void main() throws IOException {
        String[] targetString = getData();//獲取兩個數
        char[] op1 = targetString[0].toCharArray();//被除數
        char op2 = targetString[1].toCharArray()[0];//除數
        System.out.println(culculate(op1, op2));
    }

 某種處理程式碼:

public static String culculate(char[] op1, char op2) {
        StringBuilder stringBuilder = new StringBuilder();//商
        int remainder = 0;
        int iop2 = convertCharToInt(op2);
        for (int i = 0 ; i < op1.length ; i ++) {//因為第一個數已經算過了
            remainder = remainder * 10 + convertCharToInt(op1[i]);//計算本次運算元
            stringBuilder.append(remainder / iop2);
            remainder =remainder % convertCharToInt(op2);
        }
        return stringBuilder.charAt(0) == '0' && stringBuilder.length() > 1 ?
                stringBuilder.substring(1) + " " + remainder :
                stringBuilder.toString() + " " + remainder;
    }

    public static int convertCharToInt(char c) {
        return c - 48;
    }

    public static char convertIntToChar(int i) {
        return (char) (i + 48);
    }

沒什麼好說的,基本上就是在仿照除法的豎式運算...注意一下中間的char向int轉化和最後對於第一個數字出現0的處理就行了。