1. 程式人生 > 其它 >1017 A除以B (20 分)

1017 A除以B (20 分)

原題

傳輸門

程式碼

java題解

執行超時版

package pat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
/*
模擬實際的除法運算。
注意點:從最高位開始運算,上一位運算的餘數與下一位讀取到的字元組合,作為當前的被除數。
 */
public class Main {
    public static void main(String[] args) throws IOException {
        //System.in是InputStream型別,用轉換流轉換成位元組流,再套了一層緩衝流
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String str= bufferedReader.readLine();
        bufferedReader.close();
        String[] split = str.split("\\s+");
        String NumA=split[0];
        int NumB=Integer.parseInt(split[1]);

        int current=0;
        int remainder=0;//餘數
        int quotient=0;//當前的商
        StringBuilder sb = new StringBuilder();
        for (int i=0;i<NumA.length();i++){
            current=NumA.charAt(i)-48;
            quotient=(remainder*10+current)/NumB;
            remainder=(remainder*10+current)%NumB;
            sb.append(quotient);//拼接商
        }
        //去掉Q首位的0
        if (sb.charAt(0)=='0'){
            System.out.print(sb.substring(1, sb.length()));
        }
        else System.out.print(sb);

        System.out.print(" "+remainder);
    }
}

使用java.Math.BigInteger(可以表示不可變的任意精度的整數)
參看部落格

C++版

話說C++太適合做演算法題了吧
程式碼來源

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    int b = 0, j = 0, temp = 0;
    cin >> s >> b;

    for (int i = 0; i < s.length(); i++)
    {
        j = (temp * 10 + s[i] - '0') / b;    //商
        temp = (temp * 10 + s[i] - '0') % b; //餘
        if (j == 0 && i == 0 && s.length() != 1);
        else cout << j;
    }
    cout << ' ' << temp << endl;
    return 0;
}