AcWing 794. 高精度除法(Java)
原题链接
简单
作者:
云浪行川
,
2020-09-28 22:41:42
,
所有人可见
,
阅读 426
注意
- 除数为
0
的情况需要特判一下
- 余数保存在
list
的最后一位
- 除法的保存数据的顺序和加减乘法一样是倒序,所以算除法的时候要倒序
- 处理前导0的时候需要注意,如果
a
除数小于被除数b
的话答案会是0
,余数是a
,此时的list
的size
是2
,所以可以用size
大于2
来判断排除这种情况
- 其次不是所有的0都要都不打印的,所以要加个开关
m
,默认为true
- 比如
0110
,打印的时候第一个0
先进入循环,进行判断==0 && m && size >2
的条件的所以不打印,第二个1
进来不满足判断的条件,所以执行System.out.print()
此时就可以将m
改为false
防止最后一个0
打印不出来
代码
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a = br.readLine();
int bb = Integer.valueOf(br.readLine());
ArrayList<Integer> aa = new ArrayList<Integer>();
for (int i = a.length() - 1; i >= 0; i--){
aa.add(a.charAt(i) - '0');
}
if(a.equals("0")){
System.out.println(0);
System.out.print(0);
}
else{
ArrayList<Integer> c = div(aa,bb);
boolean m = true;
for(int k = 0; k < c.size() - 1 ; k++){
if(c.get(k) == 0 && m && c.size() > 2) continue; //判断前导0
System.out.print(c.get(k));
m = false;
}
System.out.println();
System.out.print(c.get(c.size() - 1)); //打印余数
}
}
public static ArrayList<Integer> div(ArrayList<Integer> aa, int bb){
ArrayList<Integer> c = new ArrayList<Integer>();
int t = 0;
for(int i = aa.size() - 1; i >= 0; i--){
t = t * 10 + aa.get(i);
c.add((t / bb));
t = t % bb;
}
c.add(t); //循环完后保存余数
return c;
}
}