栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

PAT (Basic Level) Practice 1017 A除以B

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PAT (Basic Level) Practice 1017 A除以B

cx天王盖地虎
  • PAT (Basic Level) Practice 1017 A除以B
    • 1.题目描述
    • 2.思路及代码
      • 注意事项
      • ① 模拟除法过程
      • ②与库函数比较

PAT (Basic Level) Practice 1017 A除以B 1.题目描述

2.思路及代码 注意事项

①大数要采用BufferedReader接收 ②频繁的字符串增删要考虑StringBuffer
一开始用scanner接收,全部超时,一个劲的想是不是算法不够高效,但是想半天也不知道怎么优化for循环。去看了下别人做法,发现要采用BufferedReader接收,恍然大悟。
(但是也发现很多人采用BigInteger类直接计算,我:???)

① 模拟除法过程
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		
		//采用BufferedReader输入
		BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in)); 
		String strs[] = buffer.readLine().split(" ");
		char a[] = strs[0].toCharArray();
		int b = strs[1].charAt(0) - '0';
		
		
		
		
		//由于除数b只是一位数,因此模拟除法时每次至少取两位然后除以b,取两位最方便
		StringBuffer Q = new StringBuffer("");		//由于需要频繁进行字符串添加操作,采用StringBuffer记录商
		int  pre = 0, twoNumber;					//pre记录上一次运算的余数,初始为0
		for(char c : a) {
			twonumber = pre * 10 + c - '0';			//pre与当前位结合,生成一个两位数
			Q.append(twonumber / b);				//本次运算的商添加到Q尾部
			pre = twonumber % b;					//记录新的余数
		}
		
		String ret = Q.toString();					
		if(ret.startsWith("0") && ret.length() != 1)//可能会以‘0’开始,去掉‘0’再输出
			System.out.print(ret.substring(1) + " " + pre);
		else										
			System.out.print(Q.toString() + " " + pre);
	}	
	
}

②与库函数比较

我又去试了试库函数,测了测速度

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输入
		BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in)); 
		String strs[] = buffer.readLine().split(" ");		
		
		
		BigInteger a,b,q,r;
		a = new BigInteger(strs[0]);
		b = new BigInteger(strs[1]);
		q = a.divide(b);
		r = a.mod(b);
		System.out.print(q.toString() + " " + r.toString());
	}	
	
}

发现速度差距不大:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696992.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号