/**
* Created by AndyJuseKing on 2020/1/2.
* 超长数据高精度计算
* 仅支持整数
*/publicclassCYAccuracy{privatestatic String cyNum;privatestatic String nowNum;publicCYAccuracy(String a){
cyNum = a;}publicstaticvoidadd(String n){
cyNum =makeAdd(cyNum,n);}publicstatic String getAdd(String n){
nowNum = n;returnmakeAdd(cyNum,nowNum);}publicstaticvoidsubtract(String n){
nowNum = n;
cyNum =makeSubtract(cyNum,nowNum);}publicstatic String getSubtract(String n){
nowNum = n;returnmakeSubtract(cyNum,nowNum);}publicstaticvoidmultiply(String n){
nowNum = n;
cyNum =makeMultiply(cyNum,nowNum);}publicstatic String getMultiply(String n){
nowNum = n;returnmakeMultiply(cyNum,nowNum);}publicstatic String[]divideAndRemainder(String n){
nowNum = n;
String h = cyNum;
h =removeZero(h);
String i = h;
String divNum ="";
String remNum ="";
String a ="0";int c = h.length();int d = nowNum.length();int e = c;while(d<=e){
String f = h;if(e==c){ f = h.substring(0, d);}
String g = f;if(d<=c){while(!f.contains("-")){
g = f;
f =makeSubtract(f, n);
a =makeAdd(a,"1");
f =removeZero(f);}
a =makeSubtract(a,"1");if(i.length()>=(d+divNum.length()+1)){
h =addZero(g,1);
h =makeAdd(h, i.substring(d + divNum.length(), d +1+ divNum.length()));}else{
remNum = g;
e =0;}
c = h.length();
divNum = divNum + a;
a ="0";}elseif(i.length()<(d+divNum.length()+1)){
remNum = g;
e =0;}else{
h =addZero(g,1);
h =makeAdd(h, i.substring(d+divNum.length(), d+1+divNum.length()));
c = h.length();
divNum = divNum +"0";}}// while (!newNum.contains("-")) {// newNum = makeSubtract(newNum,n);// a = makeAdd(a,"1");// newNum = removeZero(newNum);// System.out.print(newNum + "\n");// }// a = makeSubtract(a,"1");// b = newNum.substring(1);return(divNum+","+remNum).split(",");}publicstatic Double getDouble(){return Double.parseDouble(cyNum);}publicstatic Integer getInt(){return Integer.parseInt(cyNum);}publicstatic String getString(){return cyNum;}privatestatic String makeAdd(String x,String y){
String newNum ="";int i =1;if(x.substring(0,1).equals("-")){i =-1;}int j =1;if(y.substring(0,1).equals("-")){j =-1;}int m = x.length();int n = y.length();if(m < n){int c = n - m;for(int d =0; d < c; d++){
x ="0"+ x;}}elseif(m > n){int c = m - n;for(int d =0; d < c; d++){
y ="0"+ y;}}
String[] a = x.split("");
String[] b = y.split("");int g =0;for(int c = a.length;c>0;c--){int d = c-1;int f =(Integer.parseInt(a[d])*i)+(Integer.parseInt(b[d])*j)+ g;int e = f%10;
newNum = e + newNum;
g = f/10;if(d==0&&g!=0){
newNum = g + newNum;}}return newNum;}privatestatic String makeSubtract(String x,String y){
String newNum ="";int m = x.length();int n = y.length();if(m < n){int c = n - m;for(int d =0; d < c; d++){
x ="0"+ x;}}elseif(m > n){int c = m - n;for(int d =0; d < c; d++){
y ="0"+ y;}}
String[] a = x.split("");
String[] b = y.split("");int g =0;for(int c = a.length;c>0;c--){int d = c-1;int h = Integer.parseInt(a[d]);int i = Integer.parseInt(b[d]);int f =(h - i)+ g;int e = f%10;if(e==-1){ e =9;}
g = f/10;if(e<0){
g = g-1;
e = e *-1;}
newNum = e + newNum;if(d==0&&g<0){
newNum ="-"+ newNum;}}return newNum;}privatestatic String makeMultiply(String x,String y){
String newNum ="0";
String[] a = x.split("");
String[] b = y.split("");
String k ="";for(int h = b.length;h>0;h--){int i = h -1;
k = k +"0";int g =0;
String j ="";for(int c = a.length; c >0; c--){int d = c -1;int f =(Integer.parseInt(a[d])+g)* Integer.parseInt(b[i]);int e = f %10;
j = e + j;
g = f /10;if(d ==0&& g !=0){
j = g + j;}}
String l = j+k;
newNum =makeAdd(newNum,l);}return newNum;}privatestatic String removeZero(String x){
String y = x;
String[] a = x.split("");for(int b =0;b<a.length;b++){if(y.substring(0,1).equals("0")){
y = y.substring(1);}}if("".equals(y)){
y ="0";}return y;}privatestatic String addZero(String x,int length){while(length>0){
x = x +"0";
length--;}return x;}}