ACM常用算法打印版
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字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [幼儿教育]【完整版】2019-2025年中国药物发现外
- [幼儿教育]2018-2019年初中信息技术广东初一竞赛
- [幼儿教育]最新外研版(一起)小学英语五年级上册《
- [幼儿教育]农业推广与创新管理专业 -中农大毕业论
- [幼儿教育]2017-2022年中国更年期用药行业市场深
- [幼儿教育]数学1.1.2第1课时棱柱、棱锥和棱台的结
- [幼儿教育]二年级群文阅读课例欣赏
- [幼儿教育]2010-2015年中国保险行业投资分析及深
- [幼儿教育]厄运打不垮的信念第一课时
- [幼儿教育]巧用文本,让表达在言语中绽放论文
- [幼儿教育]中学生百科知识竞赛题及答案
- [幼儿教育]八大菜系英文简介
- [幼儿教育]中国男装牛仔裤市场发展研究及投资前景
- [幼儿教育]远程数字视频监控系统在银行的应用
- [幼儿教育]光纤光缆制造工艺及设备
- [幼儿教育]国家安全法试题及答案
- [幼儿教育]2011高中提前招生及竞赛试题(物理卷1)
- [幼儿教育]宁夏第三产业房地产业、科学研究和技术
- [幼儿教育]中兴通讯 ME3000模块用户硬件设计手册_
- [幼儿教育]紫外线灯管的辐照强度问题
- 苏联东欧剧变的原因和历史教训浅析
- 人工智能导论实验报告(学生)
- 思科ITE章考试原题及答案
- 《学习雷锋好榜样》主题班会教案
- 加油站建设项目安全评价报告
- 剖析社保卡管理系统
- 2017-2018年影视剧新媒体版权运营行业
- 2017-2018学年四川省成都市高一上学期
- 2019最新高中数学 第三章 3.2.1 几类不
- 2011-2015年中国基酸市场调查及行业前
- 人教版新课标选修八Unit 1 课件Warming
- 郭溪燎原小学辅导学生记录表
- 教师资格证统考综合素质写作秘笈
- 国外校园绿色建筑研究方向与建设实践
- 15.1 动物运动的方式 课件(北师大版八
- 民用飞机空调系统
- 长安侠文化传统与唐诗的任侠主题
- 《中国近现代史纲要》名词解释
- 11金本《保险学概论》复习资料
- 民用建筑机电安装工程专业施工图图纸会




