博文
【原创】关于fortran读取各行长度不一格式不一具体行数不知数据文件(2009-12-06 09:21:00)
摘要:iwanfly网友曾在一段时间前发过贴探讨过这个问题http://bbs.pfan.cn/post-312402.html当时思路不是很清晰现思考结果如下,虽然比较麻烦,但最终还是解决了读取数据的问题,前提是知道每行最大的数据个数,比如7个。不知道论坛上的网友是否有更好的方法,不吝赐教。测试数据如下:12 89 7712 999 878 777398 789 765 98 76578 8912 89 7712 999 878 777398 789 765 98 765。。。。总共78144行。大概需要5,6秒时间把数据全部读进。program mainimplicit noneinteger,allocatable :: int_array(:,:),temp_array(:,:)integer :: count,length,step,i,ierrcharacter*256 :: str_one_recordopen(100,file='data.txt')count=0step=100000length=stepallocate(int_array(length,7))int_array=0do while(.not. eof(100)) count=count+1 loop1: do i=7,1,-1 read(100,'(A)',advance='no',eor=168) str_one_record168 read(str_one_record,*,......
【原创】计算100和10000的阶乘(2009-12-05 08:24:00)
摘要:方法一:
program mainimplicit nonereal*8 :: Rfact100integer,allocatable :: main_digits(:),sub_digits(:,:)integer :: num_digitsinteger :: i,j!先用双精度数算出100!,有效位数只有15位Rfact100=1.0d0do i=1,100 Rfact100=Rfact100*dble(i)end do!求得100阶乘有多少位数字,包括低位上的0num_digits=dlog10(Rfact100)+1!分配一个数组,数组每个元素代表一个数字allocate(main_digits(num_digits),sub_digits(num_digits,3))!赋初值main_digits=0main_digits(1)=1do i=2,100 !每一位数字都乘以i,每个数都不会超过900,所以最多3位数字 main_digits=main_digits*i !分解每位数,进位处理 do j=1,num_digits call int2digits(main_digits(j),sub_digits(j,:)) if(j<=num_digits-2) then main_digits(j)=sub_digits(j,1) main_digits(j+1)=main_digits(j+1)+sub_digits(j,2) main_digits(j+2)=main_digits(j+2)+sub_digits(j,3) else&nb......
