题目内容:
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
结尾无空行
输出样例:
17636684150141093474 3
结尾无空行
思路:此题需要操作大数字,而Java中专门制作的BigInteger类能够很好的处理大数字
//基本运算:add(),subtract(),multiply(),divide(),mod(),remainder(),pow(),abs(),negate()
public void testBasic() {
BigInteger a = new BigInteger("13");
BigInteger b = new BigInteger("4");
int n = 3;
//1.加
BigInteger bigNum1 = a.add(b); //17
//2.减
BigInteger bigNum2 = a.subtract(b); //9
//3.乘
BigInteger bigNum3 = a.multiply(b); //52
//4.除
BigInteger bigNum4 = a.divide(b); //3
//5.取模(需 b > 0,否则出现异常:ArithmeticException("BigInteger: modulus not positive"))
BigInteger bigNum5 = a.mod(b); //1
//6.求余
BigInteger bigNum6 = a.remainder(b); //1
//7.平方(需 n >= 0,否则出现异常:ArithmeticException("Negative exponent"))
BigInteger bigNum7 = a.pow(n); //2197
//8.取绝对值
BigInteger bigNum8 = a.abs(); //13
//9.取相反数
BigInteger bigNum9 = a.negate(); //-13
}
Java代码实现(未优化版):
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] AorB = str.split(" ");
//BigInteger类是java为了处理大数字而专门制作的类,可以处理很大的数字(理论上无限大)
BigInteger A = new BigInteger(AorB[0]);
BigInteger B = new BigInteger(AorB[1]);
BigInteger[] QorR = A.divideAndRemainder(B);返回商和余
System.out.print(QorR[0] + " " + QorR[1]);
}
}
优化后(不超时):
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 {
String[] split = new BufferedReader(new InputStreamReader(System.in)).readLine().split(" ");
BigInteger A = new BigInteger(split[0]), B = new BigInteger(split[1]);
BigInteger[] result = A.divideAndRemainder(B); // 返回商和余
System.out.print(result[0] + " " + result[1]);
}
}