基本的に、小数点以下10 ^ 6桁までの単純な除算を手動で行うプログラムを書いています。プログラムは 3000 未満の入力で動作しますが、それ以上にすると、次のように表示されます。
Exception in thread "main" java.lang.StackOverflowError
これが私のコードです:
{
....
....
int N=100000;//nth place after decimal point
String res=obj.compute(N,103993.0,33102.0,ans); //division of 103993.0 by 33102.0
System.out.println(res);
}
public String compute (int n, double a, double b, String ans){
int x1=(int)a/(int)b;
double x2=a-x1*b;
double x3=x2*10;
int c=0;
if (n==0||n<0)
return ("3."+ans.substring(1));
else if (x3>b){
ans+=""+x1;
c=1;
}
else if(x3*10>b){
ans+=x1+"0";
c=10;
}
else if(x3*100>b){
ans+=x1+"00";
c=100;
}
else if(x3*1000>b){
ans+=x1+"000";
c=1000;
}
else if(x3*10000>b){
ans+=x1+"0000";
c=10000;
}
return compute(n-String.valueOf(c).length(),x3*c,b,ans);
}
私は Java の筋金入りのプログラマーではありません。この状況に対処するには助けが必要です。スタックサイズの増加に関するSOの投稿をいくつか読みましたが、方法がわかりませんでした。