【PAT 乙级(Basic Level)】A除以B
2015-06-08 14:27
253 查看
这个题目不难,就是一个除法算法。因为题目所测试的数据太大,所以先用字符串来接受,再把每一位转换成整型。
解题思路:用除数比较被除数每一位大小,如果除数较大,则借位,如果除数较小,则可直接计算。而且借位时遗留数字的算法是固定的,即永远只需乘10,呃,为什么有种投机取巧的感觉。。。
这是我的最终代码,牛客网那边PASS了。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String a = s.next();
int b = s.nextInt();
if (b != 0) {
int r = 0, temp = 0, n = 0;
StringBuffer q = new StringBuffer();
for (int i = 0; i < a.length(); i++) {
n = temp*10+a.charAt(i) - '0';
if (n%b==0) {//判断余数是否除尽
temp=0;//除尽时应没有数遗留给下一位
}else{
temp=n%b;//除不尽时余数借给下一位继续做除法
}
if(i==0&&n/b==0){//第一位数比除数小时,答案是0,但是最后答案不能为0开头,要避免这种情况
continue;
}
q.append(n / b);//每做一次运算则增加商的值
r=temp;//余数
}
System.out.println(q+" "+r);
}
}
}
搜索
复制
解题思路:用除数比较被除数每一位大小,如果除数较大,则借位,如果除数较小,则可直接计算。而且借位时遗留数字的算法是固定的,即永远只需乘10,呃,为什么有种投机取巧的感觉。。。
这是我的最终代码,牛客网那边PASS了。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String a = s.next();
int b = s.nextInt();
if (b != 0) {
int r = 0, temp = 0, n = 0;
StringBuffer q = new StringBuffer();
for (int i = 0; i < a.length(); i++) {
n = temp*10+a.charAt(i) - '0';
if (n%b==0) {//判断余数是否除尽
temp=0;//除尽时应没有数遗留给下一位
}else{
temp=n%b;//除不尽时余数借给下一位继续做除法
}
if(i==0&&n/b==0){//第一位数比除数小时,答案是0,但是最后答案不能为0开头,要避免这种情况
continue;
}
q.append(n / b);//每做一次运算则增加商的值
r=temp;//余数
}
System.out.println(q+" "+r);
}
}
}
搜索
复制
相关文章推荐
- Hive分组取Top N
- 浮点数精度计算出现的问题
- JavaScript编写连连看
- Java的23种设计模式
- VIM键盘映射 (Map)
- GDB(四) COFF
- POJ1226:Substrings(后缀数组)
- Android 5.0 如何正确启用isLoggable(一)__使用详解
- HexEdit 3.0爆破+部份分析
- 一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率
- DataTable转换JSON
- Android之ContextMenu的使用方法以及与OptionMenu的区别(转)
- 关于E-R图的基础理解
- 小米又双叒叕降价了,这次是红米2A
- Java ArrayList源码分析
- iOS开发资源汇总
- Tomcat源码阅读(四)Server
- php开发网站编码统一问题
- Hive 锁 lock
- 基于Spring可扩展Schema提供自定义配置支持