教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 幼儿教育 >

ACM常用算法打印版

来源:网络收集 时间:2026-07-10
导读: ACM小组内部预定函数 Ver 2.0 by IcyFenix 数学问题: 1.精度计算——大数阶乘 2.精度计算——乘法(大数乘小数) 3.精度计算——乘法(大数乘大数) 4.精度计算——加法 5.精度计算——减法 6.任意进制转换 7.最大公约数、最小公倍数 8.组合序列 9.快速傅立

ACM小组内部预定函数 Ver 2.0 by IcyFenix 数学问题:

1.精度计算——大数阶乘

2.精度计算——乘法(大数乘小数) 3.精度计算——乘法(大数乘大数) 4.精度计算——加法 5.精度计算——减法 6.任意进制转换

7.最大公约数、最小公倍数 8.组合序列

9.快速傅立叶变换(FFT) 10.Ronberg算法计算积分 11.行列式计算 12.求排列组合数 字符串处理:

1.字符串替换 2.字符串查找 3.字符串截取

计算几何: 1.叉乘法求任意多边形面积 2.求三角形面积 3.两矢量间角度

4.两点距离(2D、3D)

5.射向法判断点是否在多边形内部 6.判断点是否在线段上 7.判断两线段是否相交 8.判断线段与直线是否相交 9.点到线段最短距离

10.求两直线的交点

11.判断一个封闭图形是凹集还是凸集 12.Graham扫描法寻找凸包

数论:

1.x的二进制长度

2.返回x的二进制表示中从低到高的第i位 3.模取幂运算

4.求解模线性方程

5.求解模线性方程组(中国余数定理) 6.筛法素数产生器

7.判断一个数是否素数 图论: 1.Prim算法求最小生成树

2.Dijkstra算法求单源最短路径

3.Bellman-ford算法求单源最短路径 4.Floyd算法求每对节点间最短路径 排序/查找: 1.快速排序

2.希尔排序 3.选择法排序 4.二分查找 数据结构:

1.顺序队列 2.顺序栈 3.链表 4.链栈 5.二叉树

一、数学问题

1.精度计算——大数阶乘

语法:int result=factorial(int n); 参数: n: n 的阶乘 返回值: 阶乘结果的位数

注意:

本程序直接输出n!的结果,需要返回结果请保留long a[]

需要 math.h

源程序:

int factorial(int n) {

long a[10000];

int i,j,l,c,m=0,w; a[0]=1;

for(i=1;i<=n;i++) {

c=0;

for(j=0;j<=m;j++) {

a[j]=a[j]*i+c; c=a[j]/10000; a[j]=a[j]%10000; }

if(c>0) {m++;a[m]=c;} }

w=m*4+log10(a[m])+1; printf("\n%ld",a[m]);

for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]); return w; }

2.精度计算——乘法(大数乘小数) 语法:mult(char c[],char t[],int m); 参数:

c[]: 被乘数,用字符串表示,位数不限 t[]: 结果,用字符串表示 m: 乘数,限定10以内 返回值:

null

注意:

需要 string.h

void mult(char c[],char t[],int m) 源程序:

sum=sum/10; }

for (i=blen-2;i>=0;i--) {

for

sum=sum+res[i-j][j];

result[k]=sum%10; k=k+1; sum=sum/10;

}

if (sum!=0) {result[k]=sum;k=k+1;} for (i=0;i<k;i++) result[i]+='0';

for (i=k-1;i>=0;i--) s[i]=result[k-1-i];

(k>=10) else

s[k]='\0'; while(1) {

if (strlen(s)!=strlen(a)&&s[0]=='0') strcpy(s,s+1); else break; } }

4.精度计算——加法

语法:add(char a[],char b[],char s[]); 参数:

a[]: 被乘数,用字符串表示,位数不限 b[]: t[]:

乘数,用字符串表示,位数不限 结果,用字符串表示

null

(j=0;j<=i;j++)

{

int i,l,k,flag,add=0; char s[100]; l=strlen(c); for (i=0;i<l;i++) s[l-i-1]=c[i]-'0'; for (i=0;i<l;i++) {

k=s[i]*m+add; if

{s[i]=k%10;add=k/10;flag=1;} {s[i]=k;flag=0;add=0;}

}

if (flag) {l=i+1;s[i]=add;} else l=i; for (i=0;i<l;i++) t[l-1-i]=s[i]+'0'; t[l]='\0'; }

3.精度计算——乘法(大数乘大数)

语法:mult(char a[],char b[],char s[]); 参数:

a[]: 被乘数,用字符串表示,位数不限 b[]: 乘数,用字符串表示,位数不限 t[]: 结果,用字符串表示 返回值: null 注意:

空间复杂度为 o(n^2) 需要 string.h 源程序:

void mult(char a[],char b[],char s[]) {

int

i,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0; char result[65];

alen=strlen(a);blen=strlen(b); for (i=0;i<alen;i++) For(j=0;j<blen;j++)

res[i][j]=(a[i]-'0')*(b[j]-'0'); for (i=alen-1;i>=0;i--)

{

for (j=blen-1;j>=0;j--) sum=sum+res[i+blen-j-1][j]; result[k]=sum%10; k=k+1;

返回值: 注意: {

空间复杂度为 o(n^2) 需要 string.h

void add(char a[],char b[],char back[])

源程序:

int i,j,k,up,x,y,z,l; char *c;

if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;

c=(char *) malloc(l*sizeof(char)); i=strlen(a)-1; j=strlen(b)-1;

k=0;up=0;

while(i>=0||j>=0) {

if(i<0) x='0'; else x=a[i]; if(j<0) y='0'; else y=b[j];

z=x-'0'+y-'0'; if(up) z+=1;

if(z>9) {up=1;z%=10;} else up=0; c[k++]=z+'0'; i--;j--; }

if(up) c[k++]='1'; i=0; c[k]='\0';

for(k-=1;k>=0;k--) back[i++]=c[k]; back[i]='\0'; }

5.精度计算——减法

语法:sub(char s1[],char s2[],char t[]); 参数:

s1[]: 被减数,用字符串表示,位数不限 s2[]: 减数,用字符串表示,位数不限 t[]: 结果,用字符串表示 返回值: null 注意:

默认s1>=s2,程序未处理负数情况 需要 string.h

t[l1-1]='\0'; goto loop; }

if (strlen(t)==0) {t[0]='0';t[1]='\0';} }

6.任意进制转换

语法:conversion(char s1[],char s2[],long d1,long d2);

参数:

s[]: 原进制数字,用字符串表示 s2[]: 转换结果,用字符串表示 d1: 原进制数 d2:

需要转换到的进制数

null

返回值: 注意:

高于9的位数用大写'A'~'Z'表示,2~16位进制通过验证 源程序:

void conversion(char s[],char s2[],long d1,long d2) {

long i,j,t,num; char c;

num=0;

for (i=0;s[i]!='\0';i++) {

if (s[i]<='9'&&s[i]>='0') t=s[i]-'0'; else t=s[i]-'A'+10; num=num*d1+t; } i=0;

while(1) {

t=num%d2; if (t<=9) s2[i]=t+'A'-10; num/=d2;

if (num==0) break; i++; }

for (j=0;j<i/2;j++)

{c=s2[j];s2[j]=s[i-j];s2[i-j]=c;} s2[i+1]='\0'; }

7.最大公约数、最小公倍数

语法:resulet=hcf(int a,int b)、result=lcd(int

s2[i]=t+'0';

else

源程序:

void sub(char s1[],char s2[],char t[]) {

< …… 此处隐藏:20976字,全部文档内容请下载后查看。喜欢就下载吧 ……
ACM常用算法打印版.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1528839.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)