闲来没事,写个求两个数相除,想看看后面的小数,此算法可快速算出小数点后千万位。
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
public class CopyOfChuFa {
public static void main(String[] args)throws Exception {
int a=1;//被除数
int b=14754359;//除数
int n=0;//小数点后循环次数
int f;//每次相除余数
int l=a%b;//第一次相除的余数
long k=0;//用来记录小数点后位数
File file=new File("E:/["+a+","+b+"]-result.txt");
//删除上传计算结果文件
if(file.exists()){
file.delete();
}
FileWriter fw=new FileWriter(file,true);
BufferedWriter bw=new BufferedWriter(fw);
bw.write(a/b+".");
f=a%b;
a=f*10;
List<Integer> result=new ArrayList<Integer>();
while(f!=0&&n!=1){//整除或者算到第一重循环就结束
result.add(a/b);
f=a%b;
a=f*10;
//f==l表示到小数点循环开始,f==0表示两个数可以整除
if(f==l||f==0){
n++;
}
k++;
//每隔700万就写入到文件中
if(k%7000000==0){
for(int i=0;i<7000000;i++){
bw.write(result.get(i)+"");
}
result=new ArrayList<Integer>();
}
}
System.out.println(k);
//将最后的结果追加到文件末尾
for(int i=0;i<result.size();i++){
bw.write(result.get(i)+"");
}
bw.close();
}
}
下面是计算出来的部分结果
0.00000006777658046683017540782354557049886070957064281816648219011073269940090247227954803051762533363868942052989221693738101397695420045018560277677939109384555438836753260511012372682540800315350873596067440137521392830417099109490286904365008334147217103772519023022281076392407152354094135841482506966246381831972503854623572599799150881444595458196455705056383676173258357072645446677825854718595365613646787366364069086295107771201717404327765103180693922385919984731291952432498084125511653878016659347925585923454892211854137478964691044863419684989364837876047343025881368346805171271757722582187406447138774378473507388562254720791326820772085049577551962779270858191806231636359126140281661846509224833149308621269144935405191103185167176696730776308208306440151008932343316304015647172472894281615351775024587648978854316883573186744337724193914489948360345576517421055025162394381213036771031530410775554532731648999458397345489560068316082047346143604069820993240031640818825134999087388344014131688133655958893232840545631294453388317310158984202566848210755885769080174882555046952565001298938164646800311690938250858610665498921369610160631173472192184018295881237538004870289519185482744455384337604907132868327251627807077216977030313550049853063762376935521224608944380436994924686324902355974935949437044333813485221553847239314157938003270762220。。。
第一重循环小数点就有7122780位,算出来的文件6.79M。