c语言中字符串的子式咋样输出,C语言常用代码

《C语言常用代码》由会员分享,可在线阅读,更多相关《C语言常用代码(48页珍藏版)》请在人人文库网上搜索。

1、WORD格式-可编辑-#includeusing namespace std;void fullxunhuan(int*a,int n)int t=0;int m1,m2;if(n%2!=0)n+;for(int i=0;ii;m2-)am1m2=t%n+1;t+; for(;m1i;m1-) am1m2=t%n+1; t+; for(;m2n;a=new int *n;申请一个N行N列的数组for(inti1= 0;i1vn;i1+)ai1=new intn;for(int i=0;ivn;i+)给数组初始化for(int j=O;jvn;j+) aij=O; fullxunhuan(a,n。

2、); print(a,n);乘大数)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. 点到线段最短距离ACM、组内部预定函数数学问题:1.精度计算一一大数阶乘2. 精度计。

3、算一一乘法(大数乘小数)3. 精度计算一一乘法(大数10. 求两直线的交点11. 判断一个封闭图形是凹集还是凸集12. Graham扫描法寻找凸包数论:1. x的二进制长度2. 返回x的二进制表示中从 低到高的第i位3. 模取幕运算4. 求解模线性方程5. 求解模线性方程组(中国余数定理)6. 筛法素数产生器7. 判断一个数是否素数图论:I. Prim算法求最小生成树2. Dijkstra算法求单源最短路径3. Bellman-ford算法求单源最短路径4. Floyd算法求每对节点间最短路径排序/查找:1. 快速排序2. 希尔排序3. 选择法排序4. 二分查找数据结构:1. 顺序队列2. 顺。

4、序栈3. 链表4. 链栈5. 二叉树、数学问题1. 精度计算一一大数阶乘语法:int result=factorial(int n);参数:n:n的阶乘返回值:阶乘结果的位数本程序直接输出n!的结 果,需要返回结果请保留long a需要math.h源程序:int factorial(int n)long a10000;int i,j,l,c,m=0,w;a0=1;for(i=1;i0)m+;am=c;w=m*4+log10(am)+1; printf(n%ld,am);for(i=m-1;i=0;i-)printf(%4.4ld,ai);return w;2. 精度计算一一乘法(大数乘小数)语。

5、法:mult(char c,chart,int m);参数:c:被乘数,用字符串表示,位数不限t:结果,用字符串表示 m乘数,限定10以内返回值: null汪意:需要 string.h源程序:void mult(char c,chart,int m)int i,l,k,flag,add=O; char s100; l=strlen(c);for (i=0;i=10)si=k%10;add=k/10;flag=1; elsesi=k;flag=0;add=0;if (flag)l=i+1;si=add; elsefor (i=0;i=0;i-)for(j=ble n-1;j=O;j-)sum=s。

6、um+resi+blen-j-1j;resultk=sum%10;k=k+1;sum=sum/10;for(i=blen-2;i=0;i-)for(j=0;j=0;i-)si=resultk-1-i;sk=0;while(1)空间复杂度为o(nT) 需要 string.h 源程序:void add(char a,charb,char back)int i,j,k,up,x,y,z,l;char *c;if(strlen(a)strlen(b)l=strlen(a)+2; elsel=strlen(b)+2;c=(char *)b:乘数,用字符串表示,位数不限t:结果,用字符串表示返回值: nu。

7、llmalloc(l*sizeof(char); i=strlen(a)-1; j=strlen(b)-1; k=O;up=O; while(i=O|j=O) if(i9)up=1;z%=10; else up=0;ck+=z+0;i-;j-;if(up) ck+=1;i=0;ck=O;for(k-=1;k=0;k-)backi+=ck;示,位数不限t:结果,用字符串表示返回值: null默认s1=s2,程序未处理负数情况需要 string.h源程序:void sub(char s1,chars2,char t)int i,l2,l1,k;I2=strlen(s2);l1=strlen(s1)。

8、;tl1=0;l1 -;for(i=l2-1;i=0;i-,l1-)if(s1l1-s2i=0)tl1=s1l1-s2i+O;elsebacki=0;tl1=1O+s1l1-s2i+05. 精度计算减法语法:sub(char s1,chars2,char t);参数:s1:被减数,用字符串表示,位数不限s2:减数,用字符串表s1l1- 1=s1l1 -1-1;k=l1;while(s1k=0)tl1=s1l1;l1-;loop:if (t0=0)I1=strlen(s1);for(i=0;ivl1 -1;i+)ti=ti+1;tl1 -1=0;goto loop;if (strlen(t)=0。

9、)t0=0;t1=O;6. 任意进制转换语法:conversion(chars1,char s2,longd1,long d2);参数:s:原进制数字,用字符串表示s2:转换结果,用字符串表示d1:原进制数d2:需要转换到的进制数返回值:null高于9的位数用大写AZ表示,216位进制通过验证源程序:void conversion(char s,char s2,long d1,long d2) long i,j,t,num; char c;num=0;for(i=0;si!=0;i+)if(siv=9&si=0)t=si-O; elset=si-A+10;num=num*d1+t;i=0;wh。

10、ile(1)t=num%d2;if (tn1)return;if(m仁=n1)for(i=0;i=0;10-)m=m/2; nv=2*nv;for (it=0;it0)pii=90.0; else pii=-90.0;elsedouble integral(doublea,double b)double h=b-a;double10.Ronberg算法计算积分语法:result=integral(doublea,double b);参数:a:积分上限b:积分下限function f : 积分函数返回值:f 在( a,b )之间的积分值pii=atan(fii/fri)* 360.0/6.283。

11、185306;return;t1=(1+f(b)*h/2.0;int k=1;doubler1,r2,s1,s2,c1,c2,t2;loop:double s=0.0;double x=a+h/2.0;while(xvb)s+=f(x);x+=h; t2=(t1+h*s)/2.0; s2=t2+(t2-t1)/3.0;if(k=1) function f(x)需要自行修改,程序中用的是 sina(x)/x 需要math.h默认精度要求是1e-5 源程序:double f(double x)return sin(x)/x; /在这里插入被积函数k+;h/=2.0;t1=t2;s1=s2;goto。

12、 loop;c2=s2+(s2-s1)/15.0;if(k=2)c仁 c2;k+;h/=2.0;t1= t2;s1=s2;goto loop;r2=c2+(c2-c1)/63.0;if(k=3)r1=r2;c1=c2;k+;h/=2.0;t1= t2;s1=s2;goto loop;while(fabs(1-r1/r2)1e-5)r仁 r2;c1=c2;k+;h/=2.0;t1= t2;s1=s2;goto loop;return r2;11.行列式计算语法:result=js(ints,int n)参数:s:行列式存储数组n:行列式维数,递归用返回值:行列式值函数中常数N为行列式维度,需自行。

13、定义源程序:intjs(s,n)int sN,n;int z,j,k,r,total=0;int bNN;/*bNN用于存放,在矩阵sNN中元素s0的余子式*/if(n2)for(z=0;z=z)bjk=sj+1k+1;else bjk=sj+1k;if(z%2=0)r=s0 z *js(b,n-1);归调用*/elser=( -1)*s0z*js(b,n-1)/*递total=total+r;else if(n=2)total=s00*s11-s 01*s10; return total;12.求排列组合数语法:result=P(long n,longm); / result=long C(。

14、longn,long m);参数:m 排列组合的上系数 n: 排列组合的下系数 返回值: 排列组合数不能为空串swap:替换的字符串,可以为空串,为空串表示在源字符中删除key返回值: null符合数学规则:mJ n源程序:long P(long n,long m)long p=1;while(m!=0)p*=n;n-;m-;return p; long C(long n,long m)long i,c=1;i=m;while(i!=0)c*=n;n-;i-;while(m!=0) c/=m;m-; return c;二、字符串处理1. 字符串替换语法:replace(charstr,char。

15、 key,charswap);参数:str:在此源字符串进行替换操作key:被替换的字符串,默认str长度小于1000,如否,重新设定设定tmp大小需要 string.h 源程序:void replace(charstr,char key,charswap)intI1,l2,l3,i,j,flag; char tmp1000; l1=strlen(str); l2=strlen(key); l3=strlen(swap);for(i=0;il)return 0;for(i=start;i PI)dtheta -= PI*2;while (dtheta y ?x : y)typedef stru。

16、ct double x,y; Point;int insidepolygon(Point *polygon,int N,Point p) int counter = 0;int i;double xinters;Point p1,p2;pl = polygon0;for (i=1;iMIN(p1.y,p2.y) if (p.y y ?x : y)typedef struct double x,y; Point;int FC(double x1,doublex2)if(x1- x2- 0.000002) return 1; else return 0;int Pointonline(Pointp。

17、1,Point p2,Point p)double x1,y1,x2,y2;x1=p.x-p1.x;x2=p2.x-p1.x;y1=p.y-p1.y;y2=p2.y-p1.y;if(FC(x1*y2 -x2*y1,0)=0)return 0;if(MIN(p1.x,p2.x)v=p.x&p .xv=MAX(p1.x,p2.x)&x : y)return 0;(MIN(p1.y,p2.y)v=p. y&p.yv=MAX(p1.y,p2.y)return 1; else7. 判断两线段是否相交语法:result=sectintersect(Point p1,Point p2,Pointp3,Poi。

18、nt p4);参数:p14:两条线段的四个端 占八、返回值:0:两线段不相交;1:两线段相交;2两线段首尾相接注意:p1!=p2;p3!=p4;源程序:#define MIN(x,y) (x y ?x : y)typedef struct double x,y; Point;int lineintersect(Pointp1,Point p2,Pointp3,Point p4)Point tp1,tp2,tp3;if(p1.x=p3.x&p1.y=p3.y )|(p1.x=p4.x&p1.y=p4 .y)|(p2.x=p3.x&p2.y= p3.y)|(p2.x=p4.x&p2.y=p4.y)。

19、return 2;/快速排斥试验if(MIN(p1.x,p2.x)vp3.x&p 3.x=0) return 1; elsereturn 0;8. 判断线段与直线是否相交语法:result=lineintersect(Poi nt p1,Point p2,Point p3,Point p4);参数:pl、p2:线段的两个端点p3、p4:直线上的两个点返回值:0:线段直线不相交;1:线段和直线相交返回值: 点q到线段p1p2的距离如线段在直线上,返回1源程序:typedef struct double x,y; Point;int lineintersect(Point p1,Point p2,。

20、Point p3,Point p4)Point tp1,tp2,tp3; tp1.x=p1.x-p3.x; tp1.y=p1.y-p3.y; tp2.x=p4.x-p3.x; tp2.y=p4.y-p3.y; tp3.x=p2.x-p3.x; tp3.y=p2.y-p3.y;if(tp1.x*tp2.y-tp1.y*tp2.x)*(tp2.x*tp3.y-tp2.y*tp3.x)=0) return 1; elsereturn 0;9点到线段最短距离语法:result=mindistance(Pointp1,Point p2,Point q);参数:pl、p2: 线段的两个端点q: 判断点需要。

21、math.h源程序:#define MIN(x,y) (x y ?x : y)typedef struct double x,y; Point;double mindistance(Point p1,Point p2,Point q) int flag=1;double k;Point s;if (p1.x=p2.x)s.x=p1.x;s.y=q.y;flag=0;if (p1.y=p2.y)s.x=q.x;s.y=p1.y;flag=0;if (flag)k=(p2.y-p1.y)/(p2.x-p1.x);s.x=(k*k*p1.x+k*(q.y-p1. y)+q.x)/(k*k+1);s.。

22、y=k*(s.x-p1.x)+p1.y;if(MIN(p1.x,p2.x)v=s.x&s. xv=MAX(p1.x,p2.x) returnsqrt(q.x-s.x)*(q.x-s.x) +(q.y-s.y)*(q.y-s.y); else returnMIN(sqrt(q.x-p1.x)*(q.x-p1.x)+(q.y-p1.y)*(q.y-p1. y),sqrt(q.x-p2.x)*(q .x-p2.x)+(q.y-p2.y)*(q.y -p2.y);10. 求两直线的交点语法:result=mindistance(Pointp1,Point p2,Point q);参数:p1p4:直线上。

23、不相同的两点*p :通过指针返回结果返回值:1:两直线相交;2:两直线平行如需要判断两线段交点,检验k和对应k1 (注释中)的值是否在01之间,用在01之间的那个求交点源程序:typedef struct double x,y; Point;int linecorss(Pointp1,Point p2,Pointp3,Point p4,Point *p)double k;/同一直线if(p4.x-p3.x)*(p1.y-p3.y) -(p4.y-p3.y)*(p1.x-p3.x) =0& (p2.x-p1.x)*(p1.y-p3.y)- (p2.y-p1.y)*(p1.x-p3.x)=0) r。

24、eturn 2;/平行,不同一直线if(p4.y-p3.y)*(p2.x-p1.x)-(p4.x-p3.x)*(p2.y-p1.y)=0) return 0;k=(p4.x-p3.x)*(p1.y-p3.y)-(p4.y-p3.y)*(p1.x-p3.x)/(p4.y-p3.y)*(p2.x-p1.x)-(p4.x-p3.x)*(p2.y-p1.y);k1=(p2.x-p1.x)*(p1.y-p3.y)-(p2.y-p1.y)*(p1.x-p3.x)/(p4.y-p3.y)*(p2.x-p1.x)-(p4.x-p3.x)*(p2.y-p1.y);(*p).x=p1.x+k*(p2.x-p1.x。

25、);(*p).y=p1.y+k*(p2.y-p1.y);return 1;/ 有交点11. 判断一个封闭图形是凹集还是凸集语法:result=convex(Point*p :n:返回值:集;0:*p,int n);参数:封闭曲线顶点数组封闭曲线顶点个数1:凸集;-1 :凹曲线不符合要求无法计算默认曲线为简单曲线:无交叉、无圈源程序:typedef struct double x,y; Point;int convex(Point *p,int n)int i,j,k;int flag = 0;double z;if (n 0)flag |= 2; if (flag = 3) return/CO。

26、NCAVEif (flag != 0)return 1;/CONVEXelsereturn 0;-1;12. Graham扫描法寻找凸包 语法:Graham_scan(Point PointSet,Point ch,int n,int &len);参数:PointSet: 输入的点集 ch:输出的凸包上的点集,按照逆时针方向排列n:PointSet中的点的数目len :输出的凸包上的点的个数返回值:null源程序:struct Point float x,y;;float multiply(Pointp1,Point p2,Point p0)return(p1.x-p0.x)*(p2.y -p。

27、0.y)-(p2.x-p0.x)*(p1.y -p0.y);float distance(Point p1,Point p2) return(sqrt(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)* (p1.y-p2.y);void Graham_scan(PointPointSet,Point ch,intn,int &len)int i,j,k=0,top=2;Point tmp;for(i=1;i0) | (multiply(PointSetj,P ointSetk,PointSet0)=0)&(distance(PointSetO,PointSetj)=0)to。

28、p-;ch+top=PointSeti;len=top+1;四、数论1. x的二进制长度语法:result=BitLength(int x);参数:x:测长的x返回值:x的二进制长度源程序:int BitLength(int x)int d = 0;while (x 0) x = 1;d+;return d;2. 返回x的二进制表示中从 低到高的第i位语法:result=BitAt(int x, int i);参数:x:十进制xi :要求二进制的第i位返回值: 返回x的二进制表示中从低到咼的第i位最低位为第一位源程序:int BitAt(int x, int i)return ( x & (1。

29、 0; i-)y = (y*y)%n;if (BitAt(b,i) 0)y = (y*a)%n;return y;4. 求解模线性方程语法:result =modular_equation(inta,int b,int n);参数:a、b、n: ax=b (mod n) 的对应参数返回值: 方程的解源程序:int ext_euclid(inta,int b,int &x,int &y) /求 gcd(a,b)=ax+byint t,d;if (b=0)x=1;y=O;return a;d=ext_euclid(b,a %b,x,y);t=x;x=y;y=t-a/b*y;return d;void modular_equation(int a,int b,int n)int e,i,d;int x,y;d=ext_euclid(a,n,x,y);if (b%d0) printf(No answer!n);elsee=(x*(b/d)%n;for (i=0;id;i+)printf(The %dth answeris : %ldn,i+1,(e+i*(n/d)%n);5. 求解模线性方程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值