PAT乙级:1017 A除以B(JAVA)

题目描述:
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

输入描述:
输入在1行中依次给出A和B,中间以1空格分隔。

输出描述:
在1行中依次输出Q和R,中间以1空格分隔。

输入例子:
123456789050987654321 7

输出例子:
17636684150141093474 3

第一种就是用BigInteger来解,有点作弊的感觉,java有处理对数值很大的数有个BigInteger,因为这道题不需要求小数点后的数,那就直接调用divide去得出结果,再用被除数减去结果乘以除数的积得出两个结果

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String[] buf = bf.readLine().split(" ");
		BigInteger A = new BigInteger(buf[0]);
		BigInteger B = new BigInteger(buf[1]);
		BigInteger c = A.divide(B);
		BigInteger d = A.add((c.multiply(B)).negate());
		System.out.println(c+" "+d);
		
	}
 
}

第二种就是比较老实一点的解法

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


public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String [] input = br.readLine().split(" ");
		String A =input[0];
		int B = Integer.parseInt(input[1]);
        if(A.length() == 1) {
			int a = Integer.parseInt(A);
			System.out.println(a/B+" "+a%B);
			return;
		}
		String shang = "";
		int yu = 0;
		int temp = 0;
		for(int i = 0; i < A.length(); i++) {
			temp += Integer.parseInt(A.substring(i, i+1));
			shang += temp / B;
			yu = temp % B;
			temp = yu * 10;
		}
		String compare = shang.substring(0, 1);
		if (compare.equals("0"))
			shang = shang.substring(1);
		System.out.println(shang+" "+yu);
	}

}

第一个位数除以被除数得到商和余数,余数加10,再加上第二个数这样一直循环下去,就可以得到结果
本来我用的是Scanner的next()方法去得到A的,但是答案会超时,改用了缓冲流。
第一个测试点本来是错误的,因为可能会出现除数比被除数小的情况,所以在头部进行了一些判断
PAT乙级:1017 A除以B(JAVA)_第1张图片

你可能感兴趣的:(PAT乙级,java,算法)