2-ACM常用算法

所需积分/C币:9 2013-03-13 16:02:32 313KB PDF
收藏 收藏
举报

2-ACM常用算法,这个是pdf的文档,教的是2-ACM常用算法!
语法:mult( char c[], char t[],intm) 参数 被乘数,用字符串表示,位数不限 t]:结果,用字符串表示 m:乘数,限定10以内 返回值:nu 需要 strill 源程序: d mult(char cl, char t[l, int m) int i,l, k, flag, add=0 for(i=0;i<1;i++) k=sli]m+add if(k>=10) Is[i]=k10: add=k/10; flag=l: else si]=k; flag=0; add=0: if (flag)l=i+l:sli]=add; else 1= for (i=0; i<l:i++) [i]+’0 3.精度计算—一乘法(大数乘大数) 语法:mult( char a[], char b[], char s[) 参数 被乘数,用字符串表示,位数不限 b]:乘数,用字符串表示,位数不限 L」:结果,用字符串表示 返国值:nu11 注意 空间复杂度为o(n^2) 需要 string.h 源程序 void mult(char al, char b[l, char s[l) int i,j, k-o, alen, blen, sum=0, res 651651-101, flag-o char result65」 alen=strlen(a): blen=strlen(b) for (i for (j=0; jblen: j++)reslilj]=(ali]-0 )*(b[j]-0) >=0;i--) um-sum+res「i+blen-j-11「j1 result=sun%10 k=k+1 10 for (i=blen-2: i>=0; i for (j=0: j<=i; j++) si-订[j esult「k=sun%10 k=k+1 1/10 )result for (i-O:i<k: i++) for (i=k-1 i>=0; i--) sLi=resultlk-1-il hile(1) if (strlen(s)l-strlen(a&&301--'0') break 4.精度计算一—加法 语法:add( char a[], char b[], char s[]) 参数: 1]:被乘数,用字符串表示,位数不限 b]:乘数,用字符串表示,位数不限 t]:结果,用字符串表示 返回值:nu1l 注意 空间复杂度为o(n^2 需要 string.h 源程序 void add(char al, char b[, char back[) u t char米c f (strlen (a)strlen(b))l=strlen(a)+: else (char *)malloc(l*sizeof(char)) i=strlen(a)-1 while(i>=0 j>=0) if(io)x=0 else x=ail z=x-’0’+y-’0 if(up)it= {up=1;z%-10;} p=0 c[k++]=z+0 for(k-=1;k>=0;k--) back「i++]-c「k kLi」=\0 5.精度计算一一减法 b( char sIL」,ch 参数 s1:被减数,用字符串表小,位数不限 s21:减数,用字符串表示,位数不限 t]:结果,用字符串表示 返回值:mu11 注意 默认s1>=s2,程序未处理负数情况 需要 string.h 源程序 sub(char s1 har s2 int i,2.lk 12=strlen(s2); 11=strlen(s1) t[11]=\0’;11 for(i=121;i>=0:i-,11-) if(s1[11]-s2[i]>=0) LL1l」=s111」-s2Li」+0 t[11]=10+s1[11]-s2[i+0 1[11-1]=s1[11-1-1 k=11 while(s1[k]<0){s1[k]+=10;s1[k-1]-=1;x-;} hile(11>=0){t「111-sl「11;11--;} if(t0]==0) 11=strlen(sl) for (i-0:<11-1: i++)tli-t i+l t11-1]=\0 to loo r( strlen(t)==0){L0」=0’;tL1」=’\0;} 任意进訇转换 语法: conversion( char s1□, char s2[], long d1, long d2) 参数 s门:原进制数字,用字符串表示 s2]:转换结果,用字符串表示 原走制数 d2:需要转换到的进制数 返回值:mu11 注意 高于9的位数用大写 Z表示,2~16位进制通过验证 源程序 void conversion(char s[, char s2[, long d1, long d2) t, num: num ++ [i]<=’9&&s[i]>=03)t=s[i-'0;elsc [i]-’A’+10 num=num水d1+t hile(1) t=num%d 2 if(t<=9)s2[i]=t+’0 2[i]=t+A’-10 if ++ Or s 2[i+1]=10 7.最大公约效、最小公倍数 语法: result=hcf(inta,intb)、 t=lcd(i 参数 a:inta,求最大公约数或最小公倍数 b:intb,求最大公约数或最小公倍数 返回值:返回最大公约数(hcr)或最小公倍数(lcd) 注意 需要连同hcf他用 源程序 int hcf (int a, int b) int r=o while(b! =0) I cd(int u, i t h) return (u*v/ 8.组合序列 语法:m (int m, int nl, int m1, ints 参数 m:组合数C的上参数 n:组合数C的下参数 m1:组合数C的上参数,递归之用 a:1~n的整数序列数组 头指针 返回值:nu1l 注意 *a需要自行产生 初始调用时,m=m1、heed=0 调用例子:求C(m,n)序列 源程序 void m of n(int l, int n1, int m1, int* a, int head) Int 1,t if(m1<0 mI>n1) return for(i=0:i< cout<ali]< //输H序列 mofn(m,n1-1,m1,a,head);//递归调用 t=a head]; a lhead]=a[n1-Ithead]: a.[nl-1 thead] mofn(m,n1-1,m1-1,a,head+1);//再次递归调用 Theadl; alhead-anl-1thead alnl-1thead-t 9.快速傅立叶变英(FFT) iiik: kkfft(double pr[], double pil], int n, int k, double fr[, double fi, int l, int il); 参数 pr[n:输入的实部 pi「n:数入的虚部 n,k:满足n=2^k frLn:输出的实部 fi[n:输出的虚部 逻辑开关,0FFT,1ifFT il:逻辑开关,0输出按实部/虚部;1输岀按模/幅角 返回值:nu1l 注意 需要math.h 源程序: void kkfft(pr, pi,n, k, fr, fi, l, il) int nkl,il double prl, pil, frl, fi] int 1 t, m nv,10 double dd for (it=0: it for(i=0;i<=k-1;i++) (j=m/2 2*is+(m2米j);m=j;} frit]-prlis]; flit]=pilis LO」=1.0;pil0」=0.0 p=6.283185306/(1.0*n) poll f(1!=0)pi[1]=-pi[1] for(i=2;i<-n-1;i++) p-pr [i-1]*pi[1] (pr[i-1]+pi[i-1])*(pr[1]+pi[1]) p for 2;it=it+2) fr[itl=vr+fr「it+11;fi「itl=yi+fi「it-11 frlit-1=vr-frlit+1]: filit+l]=vi-filit+1] m=n/2;nv=2 for(10=k-2;10>=0;10--) 1=m/2;nv=2 for (it=0: it<=(m-1)nv; it for (j=0; j<=(nv/ p=prl*jl*frit+j+nv/21 kj]flit S=prm*j+pi[m*订 s-s*(frit+j+nv, 21+flit+jnv/2) p ddr frit+j+nv/2=frit+j]-poddr fi lit+]- podd frit+j]=frit+j]+poddr fi「it+j1=fi「it+j if(l!=0) 1;i++) fx[i]=fr[i]/(1.0*n) filil=filil/(1.0xn) r(il!=0) for 0;i<=n-1 (frli]*frlil+filil*filil f(fabs(fr「i1)<0.000001*fabs(fi「i1)) f ((fili *frid) 90.0 i[i]=90.0

...展开详情
试读 53P 2-ACM常用算法
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
  • GitHub

    绑定GitHub第三方账户获取
  • 分享王者

    成功上传51个资源即可获取
关注 私信 TA的资源
上传资源赚积分or赚钱
最新推荐
2-ACM常用算法 9积分/C币 立即下载
1/53
2-ACM常用算法第1页
2-ACM常用算法第2页
2-ACM常用算法第3页
2-ACM常用算法第4页
2-ACM常用算法第5页
2-ACM常用算法第6页
2-ACM常用算法第7页
2-ACM常用算法第8页
2-ACM常用算法第9页
2-ACM常用算法第10页
2-ACM常用算法第11页

试读结束, 可继续读5页

9积分/C币 立即下载 >