大整数除法(模板) PAT 乙级 1017. A除以B (20) Java版

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552

这道题直接用BigInteger来做会超时,所以用大数除法来做。

那么大数除法怎么做呢?

请读者现在拿起笔,任意写两个数做除法。我们来观察其中有什么规律。
如:
被除数为13486 除数为4
被除数        除数        商        余数

1                4                0            1(一开始余数为0)

13              4                3            1
14              4                3            2
28              4                7            0
6                4                1            2
结果是 商为3371 余数为2。(关于13 14 28 6怎么来的一开始我也不懂,用笔在纸上模拟计算13486/4的过程就可以明白了!!!)

这下读者很轻易就看出了规律,是的,把被除数从最高为开始的每一位打出来分别与除数相除,得到商和余数,再把该余数10再加上下一位被除数作为新的被除数,重复此操作,由表格,商的位数一定和被除数的位数相同(开头的0最后再删去即可)。

本题解:

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

public class B1017 {
	public static void main(String[] args) throws IOException {
		 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	    String s=in.readLine();
	    String [] a=s.split(" ");
	    int b=Integer.parseInt(a[1]);
	    int shang,divi,yu=0;
	    StringBuilder sb=new StringBuilder();
	    for(int i=0;i<a[0].length();i++) {
	    	divi=yu*10+a[0].charAt(i)-'0';
	    	sb.append(divi/b);//自动调用String.valueOf(int)方法转型
	        yu=divi%b;
	    }
	    if(sb.length()!=1&&sb.charAt(0)=='0')
	    	System.out.println(sb.substring(1)+" "+yu);
	    else {
	    	System.out.println(sb+" "+yu);
	    }
	    	
	}
	
	
}

需要注意的是:本题要求A是不超过1000位的整数,也就意味着要处理最多位1000位的字符串。这时候用BufferReader(缓冲流)的readLine()输入比  用Scanner的nextLine()输入提升了15ms左右!后者提交的时候可能有些测试点超时。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值