程序一栏.docx
- 文档编号:4312058
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:19
- 大小:21.47KB
程序一栏.docx
《程序一栏.docx》由会员分享,可在线阅读,更多相关《程序一栏.docx(19页珍藏版)》请在冰豆网上搜索。
程序一栏
一、高精度算法
高精度存储
fillchar(a,sizeof(a),0);fillchar(b,sizeof(b),0);
fori:
=1tolado
a[i]:
=ord(sa[la-i+1])-ord('0');
fori:
=1tolbdo
b[i]:
=ord(sb[lb-i+1])-ord('0');
高精度加法
ifla>lbthenlen:
=laelselen:
=lb;
fori:
=1tolendo
begin
a[i+1]:
=a[i+1]+(a[i]+b[i])div10;a[i]:
=(a[i]+b[i])mod10;
end;
ifa[len+1]>0thenlen:
=len+1;
高精度减法
ifsa=sbthenbeginwriteln('0');halt;end;
if(length(sb)>length(sa))or((length(sb)=length(sa))and(sa s: =sa;sa: =sb;sb: =s;end; len: =la; fori: =1tolendo begin ifa[i] a[i]: =a[i]+10;a[i+1]: =a[i+1]-1; end; a[i]: =a[i]-b[i]; end; whilea[len]=0dodec(len); 高精度数乘高精度数 if(sa='0')or(sb='0')thenbeginwriteln(0);halt;end; len: =la+lb; fori: =1tolado forj: =1tolbdo c[i+j-1]: =c[i+j-1]+a[i]*b[j]; fori: =1tolendo begin c[i+1]: =c[i+1]+c[i]div10;c[i]: =c[i]mod10; end; 高精度数乘单精度数 if(n=0)or(sa='0')thenbeginwriteln(0);halt;end; la: =length(sa); fori: =1toladoa[i]: =a[i]*n; fori: =1tolado begin a[i+1]: =a[i+1]+a[i]div10;a[i]: =a[i]mod10; end; la: =la+1; whilea[la]<>0do begin a[la+1]: =a[la]div10;a[la]: =a[la]mod10;la: =la+1; end; whilea[la]=0dodec(la); 高精度压位 if(sa='0')or(sb='0')thenbeginwriteln(0);halt;end; whilelamod8<>0do beginsa: ='0'+sa;la: =la+1;end; whilelbmod8<>0do beginsb: ='0'+sb;lb: =lb+1;end; yla: =ladiv8; fori: =1toylado val(copy(sa,8*i-7,8),a[yla-i+1]); ylb: =lbdiv8; fori: =1toylbdo val(copy(sb,8*i-7,8),b[ylb-i+1]); fori: =1toylado forj: =1toylbdo c[i+j-1]: =c[i+j-1]+a[i]*b[j]; len: =yla+ylb; fori: =1tolendo begin c[i+1]: =c[i+1]+c[i]div100000000; c[i]: =c[i]mod100000000; end;len: =len+1; whilec[len]=0dodec(len); fori: =lendownto1do begin ifi<>lenthenbegin if(c[i]<10)thenwrite('0000000'); if(c[i]>10)and(c[i]<100)thenwrite('000000'); if(c[i]>100)and(c[i]<1000)thenwrite('00000'); if(c[i]>1000)and(c[i]<10000)thenwrite('0000'); if(c[i]>10000)and(c[i]<100000)thenwrite('000'); if(c[i]>100000)and(c[i]<1000000)thenwrite('00'); if(c[i]>1000000)and(c[i]<10000000)thenwrite('0'); end; write(c[i]); end; writeln; 二、排序算法 选择排序 fori: =1ton-1do begin k: =i; forj: =i+1tondo ifa[k]>a[j]thenk: =j; j: =a[i];a[i]: =a[k];a[k]: =j; end; 冒泡排序 fori: =1ton-1do begin sorted: =true; forj: =ndowntoi+1do ifa[j] sorted: =false;t: =a[j];a[j]: =a[j-1];a[j-1]: =t;end; ifsortedthenexit; end; 插入排序 fori: =2tondo begin k: =a[i];j: =i-1; while(j>0)and(a[j]>k)do begina[j+1]: =a[j];dec(j);end; a[j+1]: =k; end; 快速排序 procedureqsort(l,r: longint); vari,j,x,y,z: longint; begin i: =l;j: =r;z: =random(r-l)+l+1;x: =a[z]; whilei begin whilea[i] whilea[j]>xdodec(j); ifi<=jthenbegin y: =a[i];a[i]: =a[j];a[j]: =y;inc(i);dec(j); end;end; ifi ifl 堆排序 proceduredown(i: longint); varj,t: longint; begin whilei<=totaldiv2do begin j: =2*i;if(j =j+1; ifd[j] t: =d[j];d[j]: =d[i];d[i]: =t;i: =j; endelsebreak; end;end; total: =n; fori: =totaldiv2downto1dodown(i); fori: =1tondo begin tmp: =d[total];d[total]: =d[1];d[1]: =tmp;total: =total-1;down (1); end; 合并排序 proceduremerge(s,m,t: longint); vari,j,k: longint; begin i: =s;j: =m+1;k: =s-1; while(i<=m)and(j<=t)do begin inc(k);ifa[i]<=a[j]thenbeginb[k]: =a[i];i: =i+1;end elsebeginb[k]: =a[j];j: =j+1;end; end; whilei<=mdo begininc(k);b[k]: =a[i];i: =i+1;end; whilej<=tdo begininc(k);b[k]: =a[j];j: =j+1;end; fori: =stotdoa[i]: =b[i]; end; proceduremergesort(s,t: longint); varm: longint; begin ifs m: =(s+t)div2;mergesort(s,m);mergesort(m+1,t);merge(s,m,t); end; end; 三、栈队列线性表 线性表操作 procedureinsert(x: longint); varj: longint; begin a[0]: =x;j: =n; whilea[0] begina[j+1]: =a[j];dec(j);end; a[j+1]: =a[0];n: =n+1; end; proceduredelete(k: longint); vari: longint; beginfori: =kton-1doa[i]: =a[i+1];dec(n);end; 栈操作 procedureinit; begint: =0;end; procedurepush(x: stype); begint: =t+1;s[t]: =x;end functionpop: stype; beginpop: =s[t];t: =t-1;end; functiontop: stype; beginift=0thenwriteln(’stackempty’)elsetop: =s[t];end 四、搜索算法 哈希函数 functionhash(s: string): longint; vark,i: longint; begin k: =0;fori: =ndownto1dok: =k*2+ord(s[i])-65;hash: =k; end; base: array[1..9]oflongint=(1,4,16,64,256,1024,4096,16384,65536); functionhasht: longint; vari,h: longint; begin h: =0;fori: =1to9doinc(h,base[i]*test[i]); exit(h);end; 五、查找 二分查找 functionfind1(s,t: integer;x: integer): integer; varm: integer; begin whiles<=tdo begin m: =(s+t)div2;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 一栏