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(可以表示不可变的任意精度的整数)
代码来源
这个还是运行超时的,不过通过的得分点更多了。(看运气)

package pat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;

/**
 * 主要借助了强大的工具类,一步到位
 */
public class Test {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String[] split = bufferedReader.readLine().split(" ");
        bufferedReader.close();

        BigInteger NumA = new BigInteger(split[0]);
        BigInteger NumB = new BigInteger(split[1]);
        BigInteger divide = NumA.divide(NumB);//商
        BigInteger mod = NumA.mod(NumB);//余数
        System.out.print(divide+" "+mod);

    }
}

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;
}
posted @ 2021-10-21 11:32  Infinite_V胜  阅读(22)  评论(0)    收藏  举报